newの領域を開放するタイミング


ももでん  2005-08-10 04:17:04  No: 58575

お世話になります。
newで取得した領域は、どのタイミングで解放されるのでしょうか?

ローカル変数のポインタに、new()で取得した領域のアドレスを格納します。
delete()しないで、上位の関数へ処理が移った場合、
自動的に解放されるのでしょうか?


YuO  2005-08-10 04:34:30  No: 58576

とりあえず,プログラムが終了する時までは解放されません。


ももでん  2005-08-10 06:22:19  No: 58577

YuOさん、ご回答ありがとうございます。

とりあえずと記載されていますが、
条件によっては、解放されたりするのでしょうか。


DD.  2005-08-10 18:04:23  No: 58578

メモリリークがご心配ならば

const int N = 10;
std::vector< int > v(N);
int *n = &v[0];

のようにすればよろしいかと。

vectorのデストラクタに解放をまかせて自分でdeleteする必要がないです。


YuO  2005-08-10 21:17:30  No: 58579

> とりあえずと記載されていますが、
> 条件によっては、解放されたりするのでしょうか。

終了後は知ったことじゃない,という意味です。
まぁ,Windowsであればメモリは解放されますけどね……。

生のポインタは出来るだけ扱わず,
std::auto_ptr / boost::shared_ptr

std::vector / std::string / boost::shared_array
などを使うようにしましょう。
# RAIIという考え方は非常に重要です。


とおりすがり  2005-08-13 19:28:13  No: 58580

おそらく初歩的な質問でしょうから、初歩的な答えを…

C/C++にはnewした領域が自動でdeleteされる仕組みはありません。
全部自分でdeleteする必要があります。

上記のように自動でdeleteする仕組みを作ることも出来ますが、質問
から見ると、まだその手のテクニックには手を出さずに、自分でdelete
して回った方が良いと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加