- 413 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:55:11 ]
- >>403はむしろ、C++のTest t1;の意味を誤解してそうな気がする。
C++の場合、これで作られるのは参照じゃなくて値(インスタンス)。つまり、 そのソースではインスタンスが二個作られてる。 Test *t2 = new Test();の方は、new Test()がヒープ上にインスタンスを生成して、 それを指すポインタを返す。で、t2というポインタ変数に代入する。 C++では、ヒープ上に生成したインスタンスは必ずdeleteしなきゃ駄目なので、 delete t2;をしないとリークする。これが忘れやすくて危険だから、専用のクラスを 作って、コンストラクタでポインタを記憶してデストラクタでdelete、という手法が ある。いわゆるスマートポインタで、有名なのはshared_ptr。既に標準ライブラリに 入ってる処理系も多数あり。無くてもBoostライブラリを入れればおk。 これをポインタ以外に広げて、例えばファイルハンドルをコンストラクタで生成や 記憶などして、デストラクタでクローズ、というように、資源の確保と開放を専用の クラスに包んでしまうのがRAIIという概念で、資源リーク回避の基本技。
|

|