クラスのオブジェクトを作成するとき、たとえば、
class A {
public: A() {}
};
A a;
コンストラクターだけが呼び出されますか?それとも、new
演算子が暗黙的に使用されているのですか?
私たちがしなければならないようにA* b = new A();
また、メモリのどこに保存されますかa
?b
スタックまたはヒープ?
最初のケースでa
は、がグローバル変数でない場合、それはスタックにb
置かれ、ヒープに置かれます。
そして最初のケースでは、コンストラクターのみが呼び出されます。new
2番目の場合のように明示的に行う場合を除いて、が呼び出されることはありません。
いいえnew
は暗黙的に呼び出されません。new
作成されたオブジェクトの型へのポインタを返しますが、コンストラクタ呼び出しには戻り型がありません。で作成されたオブジェクトnew
はヒープ上に存在します。Newはメモリを割り当ててから、コンストラクタを呼び出します。フォームで作成されたオブジェクトはA a
、スタックに存在します(グローバル変数でない限り)。