unique_ptrを使用した後でも、コンストラクタとデストラクタの呼び出しが一致しません。それ以外の場合は、メモリリークが発生すると一致するコンストラクタとデストラクタの呼び出しを行う方法はありますか?C++でオブジェクトを削除するには?
#include <iostream>
using namespace std;
class P
{
public:
P() { cout<<"P()\n"; }
virtual ~P() { cout<<"~P()\n"; }
};
class D: public P
{
P *q;
public:
D(P *p):q(p) { cout<<"D()\n"; }
~D() { cout<<"~D()\n"; }
};
class A: public D
{
public:
A(P *p):D(p) { cout<<"A()\n"; }
~A() { cout<<"~A()\n"; }
};
class B: public D
{
public:
B(P *p):D(p) { cout<<"B()\n"; }
~B() { cout<<"~B()\n"; }
};
int main()
{
P *p = new B(new A(new P()));
delete p;
return 0;
}
OUTPUT:
P()
P()
D()
A()
P()
D()
B()
~B()
~D()
~P()
'D'はデストラクタで' qを削除する 'べきです。コピー構築を禁じます。 – LogicStuff
"unique_ptrを使った後でも" - あなたのコードはunique_ptrを使用しません –