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

Nik*_*iou 7 c++ c++14

这不包括由cornercase 这个(虽然有趣的信息在其中设置).我的代码如下所示:

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

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

struct implementation final : concept, policy {
}; 
Run Code Online (Sandbox Code Playgroud)

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

unique_ptr<concept> = make_unique<implementation>(); 
Run Code Online (Sandbox Code Playgroud)

以上安全吗?

我相信这是因为,如果有人试图通过指针删除policyprotected析构函数不会允许它(从招Modern C++ design),但没有休息,做工精细?(即当删除指向概念的指针时,保证被正确调用的层次结构的析构函数?)

R S*_*ahu 5

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

我没有看到任何理由为什么其余的不会像他们应该的那样工作.