- ベストアンサー
クラスのインスタンス作成について
以下のようなクラス(単純化しています)とテスト関数内でインスタンス生成しています。どちらも意味は同じですが、(1)はtest関数を抜けると勝手に消滅(デストラクタ)してくれますが、(2)はdeleteを使わないと消滅しません。 (2)の方が面倒くさい(new, delete)ですが、(2)を使わないといけない場面や理由が想像できません。クラスの配列なら意味がある???と思いますが、1つのインスタンスで(2)にする場合どんな利点があるのでしょうか? class A { }; void test{ A a; -----> (1) A *pa = new A; -+ (2) delete pa; -+ } あと、A::TEISU = 1とクラスのグローバル定数を設定したいのですがどうすればよいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
一般的な環境(WindowsやUnix)では、 スタックを圧迫してしまう為、特にサイズの大きいクラスは newして使います。(大きいサイズをスタックにとると再起する関数等はスタックオーバーする原因になります。) また解放し忘れがないようにauto_ptrというものが容易されています。 void test() { std::auto_ptr<A> pa(new A() ); } pa->fnc();というようにポインタとして扱えます。 >あと、A::TEISU = 1とクラスのグローバル定数を設定したいのですがどうすればよいのでしょうか? class A { public: static const int TEISU = 1; };
その他の回答 (1)
- jacta
- ベストアンサー率26% (845/3158)
> 1つのインスタンスで(2)にする場合どんな利点があるのでしょうか? 最も分かりやすい例は、test関数を抜けてもインスタンスを保持したい場合です。 具体的には、 struct B { A* a; }; void test(B* b) { b->a = new A; } などです。