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 的话就可以了。