お世話になります。
newで取得した領域は、どのタイミングで解放されるのでしょうか?
ローカル変数のポインタに、new()で取得した領域のアドレスを格納します。
delete()しないで、上位の関数へ処理が移った場合、
自動的に解放されるのでしょうか?
とりあえず,プログラムが終了する時までは解放されません。
YuOさん、ご回答ありがとうございます。
とりあえずと記載されていますが、
条件によっては、解放されたりするのでしょうか。
メモリリークがご心配ならば
const int N = 10;
std::vector< int > v(N);
int *n = &v[0];
のようにすればよろしいかと。
vectorのデストラクタに解放をまかせて自分でdeleteする必要がないです。
> とりあえずと記載されていますが、
> 条件によっては、解放されたりするのでしょうか。
終了後は知ったことじゃない,という意味です。
まぁ,Windowsであればメモリは解放されますけどね……。
生のポインタは出来るだけ扱わず,
std::auto_ptr / boost::shared_ptr
や
std::vector / std::string / boost::shared_array
などを使うようにしましょう。
# RAIIという考え方は非常に重要です。
おそらく初歩的な質問でしょうから、初歩的な答えを…
C/C++にはnewした領域が自動でdeleteされる仕組みはありません。
全部自分でdeleteする必要があります。
上記のように自動でdeleteする仕組みを作ることも出来ますが、質問
から見ると、まだその手のテクニックには手を出さずに、自分でdelete
して回った方が良いと思います。
ツイート | ![]() |