このコードがあるとします:
#include <iostream>
using namespace std;
class A
{
protected:
virtual ~A() { cout << "A destructor reached." << endl;}
friend class Z;
};
class B : public A
{
protected:
virtual ~B() { cout << "B destructor reached." << endl; }
};
class Z
{
public:
void Test();
friend class A;
};
void Z::Test()
{
A* derived = (A*) new B();
delete derived;
}
int main()
{
Z test;
test.Test();
}
B デストラクタが呼び出されるのでしょうか。それは合法ですか?そうでない場合、すべてのクラスを Z の友人から派生させずに、派生コンストラクターを呼び出す方法はありますか?