C++中为啥ifstream不用new,用完还不用delete

刚从C#开始转C++,有很多东西不理解,如下边这段代码:

#include <fstream>

#include <iostream>

int main() {

using namespace std;

ifstream file;

basic_ifstream <wchar_t> wfile;

char c;

// Open and close with a basic_filebuf

file.rdbuf()->open( "basic_filebuf_close.txt", ios::in );

file >> c;

cout << c << endl;

file.rdbuf( )->close( );

// Open/close directly

file.open( "iotest.txt" );

file >> c;

cout << c << endl;

file.close( );

// open a file with a wide character name

wfile.open( L"iotest.txt" );

// Open and close a nonexistent with a basic_filebuf

file.rdbuf()->open( "ziotest.txt", ios::in );

cout << file.fail() << endl;

file.rdbuf( )->close( );

// Open/close directly

file.open( "ziotest.txt" );

cout << file.fail() << endl;

file.close( );

}

下边是我跟大牛的聊天记录,疑问解开。(有个大牛帮解答疑问感觉就是爽啊!)

skyline wolf 2014/8/11 9:35:42 有2个疑问

ifstream file;

file.open( "iotest.txt" );

file.close( );

1.这里没有new就可以调用file的方法吗?

2.用完之后,调用file.close(),最终不用delete是为什么?

大牛 2014/8/11 9:33:55

自己再想想。new是干什么的

skyline wolf 2014/8/11 9:35:42

new是用来创建对象,在堆上分配内存空间的。你的意思是说这个ifstream是模板所以不用吗?

9:36:22

大牛 2014/8/11 9:36:22

new的理解对。这个对象是在栈上声明的

skyline wolf 2014/8/11 9:38:19

你的意思是说,如果一个对象在前边只是声名了一下,那么这个声名的变量就被分配在了栈上。如果声名的时候用new就分配在堆上。是这样吗?

9:38:40

大牛 2014/8/11 9:38:40

是的

大牛 2014/8/11 9:39:09

栈上的对象不用delete。

skyline wolf 2014/8/11 9:39:15

哦,那第二个问题就清楚了。第一个问题还是不解理,

skyline wolf 2014/8/11 9:39:37

栈上的对象不用delete我是知道的

skyline wolf 2014/8/11 9:40:16

哦,是不是C++使用了默认构造函数?

skyline wolf 2014/8/11 9:40:38

在调用 前初始化了这个对象

9:41:46

大牛 2014/8/11 9:41:46

是的

你在构造函数里面设个断点观察下

skyline wolf 2014/8/11 9:43:01

3Q,清楚了。嗯,这个调试方法挺好的。

C++中为啥ifstream不用new,用完还不用delete

时间: 2024-12-10 09:43:26

C++中为啥ifstream不用new,用完还不用delete的相关文章

原地打方向原来很伤车?看完还敢吗?

原地打方向原来很伤车?看完还敢吗? http://auto.sohu.com/20160818/n465238431.shtml 经常有不少朋友在车辆掉头时,为了省事也好,或者是为了减小车辆的转弯半径,习惯性的原地打方向,长此以往,就养成坏习惯,其实这种的做法是很伤车的. 原地打方向对车辆都有什么样的伤害? 一 影响轮胎寿命 原地打方向时由于车轮没有转动,尤其是前轮在承受着车身重量的同时还要移动转向,这无疑将增加对轮胎表面的磨损,减少轮胎使用寿命.轮胎磨损,受力不均匀,就造成轮胎胎面受损程度不同

盘点国内程序员不常用的热门iOS第三方库:看完,还敢自称”精通iOS开发”吗?【转载】

综合github上各个项目的关注度与具体使用情况,涵盖功能,UI,数据库,自动化测试,编程工具等类型,看完,还敢自称”精通iOS开发”吗? https://github.com/syedhali/EZAudio 基于核心音频,有助于进行实时,低延迟音频处理和可视化的iOS和OSX音频可视化框架. https://github.com/bang590/JSPatch JSPatch使用Objective-C运行时桥接Objective-C和Javascript.你可以只包括一个此库,就可以通过Ja

谈谈asp.net MVC中的AppendTrailingSlash以及LowercaseUrls ,你还记得吗?

asp.net MVC是一个具有极大扩展性的框架,可以在从Url请求开始直到最终的html的渲染之间进行扩展,所以要学好还是需要了解框架的运行原理,推荐Artech. 今天我们回忆的不是MVC中的filter,也不是Controller的激活或者是Action的执行,或者是Url路由RouteData的生成,我们来回忆的是RouteTable.Routes  ,即全局路由表的两个属性.AppendTrailingSlash以及LowercaseUrls. AppendTrailingSlash的

想要隐藏掉gridview中的某一列,但是还想要使用该列数据解决办法。

试过visable=“false”  只能隐藏掉数据,但是访问的时候变成“”了.即无法使用.后来改变使用了模版列可以达到想要的效果.可以隐藏,可以访问. aspx页面: <asp:TemplateField Visible="false">                    <ItemTemplate>                        <asp:label ID="lbdefault" runat="serv

liferay中数据库表的解析未完

页面布局 1:表layout 主要的字段有: 字段 privateLayout 0表示的是公开的页面 字段 layoutId 如果在同一个社区中有很多的界面,layoutId表示各个界面,按照顺序排列的 字段 parentLayoutId 如果一个页面下有子页面需要指定parentLayoutId 字段 priority 指明同一个社区中处于同一级别的页面按什么优先顺序排列 字段 type_ 取值范围(portlet,Embedded,Artical,url,link to page),如果将t

Filesystem-Hierarchy-Standard(FHS) 文件系统层次结构标准2.3中英对照版(未完待续)

本想把原文翻译一遍,一来学习学习Linux的文件系统结构,二来熟悉下专业英语.经历了一个月之久,才翻译到一半.再也没有空闲时间待在学校了,不知道什么时间才能翻译完.先在这里发表一下,给有需要的同志们方便学习,也给自己一个提醒,告诉自己这里还有一件未完成的事..感謝大家支持 --------------------------------------以下是FHS-2.3正文内容----------------------------------------------- Filesystem Hi

血的教训---工作中注意的事项(未完)

工作中注意的事项 1. 千万不要执行:yum -y remove python 或者 rpm -e python --nodeps 因为yum是使用python编写的,如果把python卸载了,则yum将不能再继续使用了 如果想自己编译安装新版本的python,也千万不要卸载掉centos自带的python,不用管它就好 2. 千万不要执行:iptables -F 因为如果你的filter表中的INPUT链默认的规则是所有的请求都拒绝的话,就完了 [[email protected] ~]# i

2014马哥Linux0217-4中LineCount的小程序补完版

上一篇因为没学会字符测试,所以写的文件数行脚本,运行起来并不是那么完美,看完0218-1课后,修改代码成如下,基本没有不理想的状态发现了: #!/bin/bash # read -t 10 -p "Please enter a file path in 10 seconds:" fileName #超时设置成10秒 fileName=${fileName:-null} #变量默认值的设定 if [ "$fileName" == null ];then #字符测试的语

网页设计中为啥少用奇数字体?

一.UI设计师的原因 多数设计师用的设计软件(如:ps)大多数都是偶数,所以前端工程师一般都是用偶数字体 二.浏览器的原因 其一是为了迁就ie6,万恶的ie6会把定义为13px的字渲染成14px,你可以写个页面试试还有一个原因是,偶数宽的汉字,比如12px宽的汉字,去掉1像素的间距,填充了像素的实际宽是11px,这样汉字的中竖线左右是平分的,以“中”这个字为例,在12像素时,竖线在中间,左右各5像素,显得均衡. 其二像谷歌一些比较流行的浏览器一般会有个默认的最小字体,而且对奇数字体渲染的不太好看