虚拟析构函数仅在选定的基础上

时间:2015-03-22 23:12:32

标签: c++ c++14

这是this未涵盖的角落(虽然其中提供了有趣的信息)。我的代码如下所示:

struct concept {
    virtual ~concept() = default; 
}; 

struct policy {
protected : 
    ~policy() = default; 
}; 

struct implementation final : concept, policy {
}; 

如果我仅通过指向concept的指针使用此层次结构:

unique_ptr<concept> = make_unique<implementation>(); 

以上安全

我认为这是因为如果有人试图通过指向policy的指针删除protected析构函数不允许它(来自Modern C++ design的技巧)但其余工作正常吗?(即删除指向概念的指针是否保证正确调用层次结构的析构函数?)

1 个答案:

答案 0 :(得分:5)

由于~concept()是虚拟的,当您通过delete指针concept对象时,它会调用~implementation()

我认为没有任何理由说明其余部分不会像预期的那样发挥作用。