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,清楚了。嗯,这个调试方法挺好的。 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值