【发布时间】:2013-11-28 15:26:42
【问题描述】:
在 C++11 中,多态类(具有 virtual 成员方法的类)应该/必须具有 virtual 析构函数(以便基类指针上的 delete 达到预期效果)。但是,显式声明析构函数会弃用复制构造函数的隐式生成(尽管编译器可能不会广泛实现这一点),因此也弃用默认构造函数。因此,对于不被弃用的任何多态类,它必须具有这些成员
virtual ~polymorphic_class() = default;
polymorphic_class() = default;
polymorphic_class(polymorphic_class const&) = default;
明确定义,即使它们是微不足道的。我对么? (这不是很烦人吗?)这背后的逻辑是什么?有什么办法可以避免吗?
【问题讨论】:
-
virtual ~my_class() = default;呢? -
多态的公共基础应该是抽象的,因此无论如何您都需要显式声明构造函数以使其成为
protected。您仍然可以使用= default默认构造函数,您只需明确提及即可。 -
@Walter:因为stackoverflow.com/questions/16724946/…
-
@KerrekSB:如果类是抽象的,为什么需要构造函数
protected?反正也不能实例化,除非是作为基类子对象,那么公有构造函数会造成什么问题呢?或者你的意思是让所有构造函数protected是你让它“抽象”的手段,如果它碰巧不是一个抽象类,因为由于某种原因它没有纯虚函数? -
因为如果有比记录意图更好的东西,它会记录两次意图;-p 无论如何,如果它纯粹是一种风格,那么我不需要理解它,除非或直到我正在工作规定它的风格指南。
标签: c++ c++11 constructor destructor