class A
{
public:
A();//code for constructor
~A();//code for destructor
}
int main(){
{
A a= new A();
delete a;
}
次のコードはどこでエラーをスローしますか.. ~A() がコンストラクターと同じように暗黙的に呼び出されるか、メイン関数でオブジェクト "a" が削除されます。前もって感謝します。
class A
{
public:
A();//code for constructor
~A();//code for destructor
}
int main(){
{
A a= new A();
delete a;
}
次のコードはどこでエラーをスローしますか.. ~A() がコンストラクターと同じように暗黙的に呼び出されるか、メイン関数でオブジェクト "a" が削除されます。前もって感謝します。
コードが次のように修正されたと仮定します。
class A
{
public:
A();//code for constructor
~A();//code for destructor
};
int main()
{
A *a= new A();
delete a;
}
デストラクタは、delete がオブジェクトが占有していたメモリを解放する前に、delete によって呼び出されます。
次のように、コードがスタックに を置いた場合:
class A
{
public:
A();//code for constructor
~A();//code for destructor
};
int main()
{
A a;
} // <---- Here
デストラクタは、囲んでいるスコープの右中括弧の前に呼び出されます。この場合、外側のスコープは関数 main です。
しかし、次のように が別のブロック内に作成された場合:
class A
{
public:
A();//code for constructor
~A();//code for destructor
};
int main()
{
if( 1 == 1 )
{
A a;
// Do something with a
} // <---- Here
}
デストラクタは、if ブロックの終了ブロックの直前に呼び出されます。ブロックを作成する場所でも同じことが言えます。for ループ内、while ループ内、または単にコード ブロックを中かっこで囲んだ場合でも。
コンストラクタとデストラクタを宣言するときは、それらも定義する必要があります。そうしないと、コンパイラはいくつかのエラーを出します。あなたのものは宣言されたばかりです...
例:
クラステスト { 公衆: test() {} //宣言および定義 ~test() {} //宣言および定義 }
私は@cppcodeに同意し、同じことを書いたでしょう。
しかし、私は行を追加します
A a= new A();
する必要があります
A *a= new A;
または、コンストラクタ/デストラクタを宣言しないでください。C++ がその作業を行います。