【发布时间】:2016-01-22 19:25:00
【问题描述】:
当组织继承结构并需要使基类抽象时,有什么理由更喜欢纯虚析构函数而不是受保护的构造函数(反之亦然)?这个问题已经存在here,但接受的答案并没有真正回答它。问题
Base *ptr = new Derived();
delete ptr;
两种方法都可以解决:
- 将 dtor 设为纯虚拟并为其定义主体
- 使 dtor 虚拟化并使 ctor 受保护
据我了解,唯一不同的是在尝试Base *ptr = new Base() 时编译器错误:Cannot instantiate abstract class 在第一种情况下与Cannot access protected member 在第二种情况下,第一种情况更准确。这是风格的问题,还是有什么我不知道的?
作为一个有点相关的问题,相同的规则是否会应用于继承链中的某些类,这些类不是严格意义上的基类,但仍然应该是抽象的(即不能创建从 GameObject 继承的 Monster,但 @ 987654328@继承自Monster可以)?
【问题讨论】:
标签: c++ inheritance abstract-class