• ベストアンサー

クラスのインスタンス作成について

以下のようなクラス(単純化しています)とテスト関数内でインスタンス生成しています。どちらも意味は同じですが、(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とクラスのグローバル定数を設定したいのですがどうすればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.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)
回答No.1

> 1つのインスタンスで(2)にする場合どんな利点があるのでしょうか? 最も分かりやすい例は、test関数を抜けてもインスタンスを保持したい場合です。 具体的には、 struct B {  A* a; }; void test(B* b) {  b->a = new A; } などです。