2017-01-01 5 views
-7
delete[] File; 

printf("[%s][%d] Loaded successfully!\n", FilesList.c_str(), FileSize); 

return File; 

//delete[] File ? 
+8

できません。デザインが悪い。あなたが解決しようとしている実際の問題を投稿してください。 – DeiDei

+3

何ですか?解放されたメモリへのポインタを返していますか? – UnholySheep

+2

'delete []'? 'File'と呼ばれるものはおそらく配列ではありません。 – Unimportant

答えて

2

"new"演算子で "File"を作成したと仮定すると、それを返す前に削除したくありません。これにより、呼び出し元は削除されたオブジェクトへのポインタを保持したままになります。

あなたの質問は本当に何かのようだと思いますが、私が関数と戻り値に割り当てるものが最終的に解放されるようにするにはどうすればよいですか?

おそらくあなたが望むのはC++のstd::unique_ptrです。これを使用して、関数内にヒープオブジェクトを割り当てて、オブジェクトへのポインタとオブジェクトの所有者の両方を呼び出し側に渡すことができます。 unique_ptrは、呼び出し元がオブジェクトを処理するときにオブジェクトに関連付けられたメモリを解放します。

関連する問題