朋友说明符的析构函数是什么?

Ian*_*Ian 3 c++ destructor c++11

我在浏览有关析构函数cppreference页面时,发现有两个地方似乎表明存在朋友析构函数。

DECL说明符-SEQ - 朋友,直列,虚拟,或没有(没有返回类型)

...

在名称空间范围内或在不同类内的朋友声明中...

朋友析构函数的概念对我来说绝对没有意义,而且我在实践中从未见过。我希望有人能解决这个问题,并解释为什么析构函数将拥有朋友说明符,以及它的外观。

120*_*arm 5

您应该在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