这是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
的技巧)但其余工作正常吗?(即删除指向概念的指针是否保证正确调用层次结构的析构函数?)
答案 0 :(得分:5)
由于~concept()
是虚拟的,当您通过delete
指针concept
对象时,它会调用~implementation()
。
我认为没有任何理由说明其余部分不会像预期的那样发挥作用。