using namespace std;
class base {
friend class A;
private:
virtual ~base() { cout << "~base" << endl; }
};
class inherit : public base {
private:
~inherit() { cout << "~inherit" << endl; }
};
class A {
public:
A(base *b) : p(b) {}
~A() { delete p; }
private:
base *p;
};
int main(void)
{
A a(new inherit);
return 0;
}
编不过,声明为protected没问题,请问这个时候两者的差别是什么呢?
解决方案:20分
你的代码里面,除了 A 的析构会调用 ~base 外, inherit 的析构也需要调用 ~base.
A 有 friend, 调用 ~base 没问题
inherit 调用 ~base 的时候,如果 ~base 是 protected 的,那么就可以,private 的就不行. 当然,如果在 base 里面再把 inherit 也设置成 friend 的话就可以了。
A 有 friend, 调用 ~base 没问题
inherit 调用 ~base 的时候,如果 ~base 是 protected 的,那么就可以,private 的就不行. 当然,如果在 base 里面再把 inherit 也设置成 friend 的话就可以了。