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


ももでん  2005-08-09 19:17:04  No: 58575  IP: 192.*.*.*

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

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

編集 削除
YuO  2005-08-09 19:34:30  No: 58576  IP: 192.*.*.*

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

編集 削除
ももでん  2005-08-09 21:22:19  No: 58577  IP: 192.*.*.*

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

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

編集 削除
DD.  2005-08-10 09:04:23  No: 58578  IP: 192.*.*.*

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

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

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

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

編集 削除
YuO  2005-08-10 12:17:30  No: 58579  IP: 192.*.*.*

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

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

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

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

編集 削除
とおりすがり  2005-08-13 10:28:13  No: 58580  IP: 192.*.*.*

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

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

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

編集 削除