c ++,protected abstract virtual base pure virtual private destructor

ra1*_*170 20 c++

所以,我今天发现这句话,有人能解释一下吗?

"如果您认为C++并不过分复杂,那么什么是受保护的抽象虚拟基础纯虚拟私有析构函数,以及您最后一次需要它的时间? - Tom Cargill"

Jam*_*ran 19

我相信它是一个私有的纯虚拟析构函数(我认为这部分是不言自明的),它是抽象基类的一部分,你通过受保护的虚拟继承使用它..

 class Base
 {
    private:
        virtual ~Base() = 0;   /* A */
 };

 class Derived : protected virtual Base
 {
    private:
     ~Derived () {.......}    /* B */
 };
Run Code Online (Sandbox Code Playgroud)

从标记B的角度来看,标记A处的行是"受保护的抽象虚拟基础纯虚拟私有析构函数",

这三个部分中的每一个都有其各自的用途.我不知道需要上述三个部分的设计模式,但没有什么能阻止它们一起使用.

  • 那是编译错误,对吧?因为在虚拟继承中,虚拟基础的析构函数必须由派生最多的析构函数调用,但是`~Derived()`无法访问`~Base()`.(注意:仅仅因为`~Base()`是*纯虚拟*并不意味着没有身体.) (4认同)

BR4*_*FCK 5

斯科特·迈耶斯也给出了他的答案:

https://youtu.be/ltCgzYcpFUI?t=7m25s

迈耶斯的解释。