程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++中為啥ifstream不用new,用完還不用delete

C++中為啥ifstream不用new,用完還不用delete

編輯:C++入門知識

C++中為啥ifstream不用new,用完還不用delete


剛從C#開始轉C++,有很多東西不理解,如下邊這段代碼:

#include
#include

int main() {
using namespace std;
ifstream file;
basic_ifstream 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. 下一頁:
Copyright © 程式師世界 All Rights Reserved