假設我有這樣的代碼:友好和繼承
#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的一個朋友派生每個類?
你試過嗎? – Beta
@貝塔是的,我可以,但我想確定行爲與我的編譯器(VS 2012)和標準沒有什麼關係。 – denidare