[1828] Re:C++のメモリ管理
投稿者:(ぱ)こと管理人
2012/07/24 02:42:22
> 303ページに「オブジェクトの寿命をプログラマが完全に制御しなければならないC++」
>とありますが。
「プログラミング言語を作る」のp.303ですね。
> C++はコンストラクタ、デストラクタによるリソース管理を行っており、
>原則オブジェクトの寿命はそのスコープ内です。
はい(まあ、どこまでのオブジェクトをスタック上に取るかという問題はありますが)。
> そのため、この記述はC++にとっては特殊な状況を除いて正しくない、という
>ことにはならないでしょうか
ただ、文脈上ここは、「Diksamにファイナライザを付けなかった理由」です。
C++の場合、デストラクタが動くタイミングは、スタックに取ったオブジェクトなら
ブロックを抜けるときですし、ヒープに取ったオブジェクトならdeleteする時です。
よって、デストラクタが動くタイミングはプログラマが完全に予期できるので、
C++ではデストラクタは有用なのだけれど、Diksamではタイミングが予期できないので
役に立たない、ということを書いています。
そういう意味だと「オブジェクトの寿命をプログラマが完全に制御できるC++」と
いう言い方の方が適切だったかもしれませんが、ヒープに確保したオブジェクトの
deleteのめんどくささを考えるとついつい「オブジェクトの寿命をプログラマが
完全に制御しなければならないC++」と書きたくなってしまう……という感情が
私の中にあったかもしれません。
間違いとは思いませんが、C++好きな方からするとカチンとくるかもしれませんね。
失礼しました。
ご意見ありがとうございました。