Ian*_*Ian 3 c++ destructor c++11
我在浏览有关析构函数的cppreference页面时,发现有两个地方似乎表明存在朋友析构函数。
DECL说明符-SEQ - 朋友,直列,虚拟,或没有(没有返回类型)
...
在名称空间范围内或在不同类内的朋友声明中...
朋友析构函数的概念对我来说绝对没有意义,而且我在实践中从未见过。我希望有人能解决这个问题,并解释为什么析构函数将拥有朋友说明符,以及它的外观。
您应该在decl-specifier-seq下查看id-expression的描述。您可以将另一个类的析构函数声明为朋友。
class AClass;
class classB {
public:
AClass *a;
~classB();
};
class AClass {
friend classB::~classB();
~AClass();
};
classB::~classB() {
delete a;
}
Run Code Online (Sandbox Code Playgroud)
在这个人为的示例中,如果没有friend声明,classB将无法销毁所包含的AClass对象。
友谊的所有常规好处(例如能够访问该类的私有和受保护成员)也将适用,因此这将使析构函数classB可以访问的任何私有或受保护的成员AClass。