6

クラスのオブジェクトを作成するとき、たとえば、

class A {
  public: A() {}
};

A a;

コンストラクターだけが呼び出されますか?それとも、new演算子が暗黙的に使用されているのですか?

私たちがしなければならないようにA* b = new A();

また、メモリのどこに保存されますかabスタックまたはヒープ?

4

2 に答える 2

8

最初のケースでaは、がグローバル変数でない場合、それはスタックにb置かれ、ヒープに置かれます。

そして最初のケースでは、コンストラクターのみが呼び出されます。new2番目の場合のように明示的に行う場合を除いて、が呼び出されることはありません。

于 2012-08-20T18:04:09.577 に答える
6

いいえnewは暗黙的に呼び出されません。new作成されたオブジェクトの型へのポインタを返しますが、コンストラクタ呼び出しには戻り型がありません。で作成されたオブジェクトnewはヒープ上に存在します。Newはメモリを割り当ててから、コンストラクタを呼び出します。フォームで作成されたオブジェクトはA a、スタックに存在します(グローバル変数でない限り)。

于 2012-08-20T18:05:32.257 に答える