2011-04-12 63 views
0

我有這個問題,需要用一些構造函數初始化一些對象的數組。讓我告訴我的意思:C++ alloc對象數組

ofstream* out = new ofstream[10]; 

for(int i = 0; i < 10; i++){ 
    stringstream ss; 
    ss << "file" << i << ".txt"; 
    string str(ss.str()); 
    char *fileName = (char*)str.c_str(); 
    out[i] = ofstream(fileName); //Now, this is wrong 
} 

我需要在wrong標記線一些幫助。我該如何分配數組的每個成員?

謝謝你不指着我的其他職位(我看到了很多發佈前)

+0

放置新的'out'是容易發生內存泄漏。記得調用'delete []'打開。 – 2011-04-12 20:05:41

+0

做到了,謝謝:) – 2011-04-12 20:50:59

回答

5

擺脫fileName變量和使用out[i].open(str.c_str()); - 並記住delete[] out;

+0

'delete []'還會在我的數組中的每個流上調用'close()'? – 2011-04-12 20:07:44

+1

@iuliux:delete []將確保每個流的析構函數被調用 - 關閉它。 – Erik 2011-04-12 20:10:04

+0

很酷。然後讓你的答案成爲你選擇的答案,儘管@Chris Kaminski也回答了很好 – 2011-04-12 20:17:14

5

這是最簡單的解決方案你的問題。

out[i].open(fileName); 
2

您可以優化此,有消除strfileName
out[ i ].open(ss.str().c_str());

另外,我建議你喲使用std::vector不要攜帶內存分配和釋放。
std::vector<std::ofstream>

+0

嗯,我早些讀過爲什麼'ss.str()。c_str()'不起作用。這些人說,'ss.str'生成一個臨時對象。 – 2011-04-12 20:15:48

+0

咦?這很奇怪O.o我沒有看到任何錯誤 - 是的,'.str()'返回臨時對象,但是什麼?打開文件(流)時仍然是「活的」。 – 2011-04-12 20:23:17

+0

我剛剛在Visual Studio 2010上運行了這個版本,但沒有警告,它工作得很好:? – 2011-04-12 20:24:50