【发布时间】:2015-07-02 06:40:05
【问题描述】:
根据“五法则”,当我声明以下之一时:复制或移动操作或析构函数我必须编写所有这些,因为编译器不会为我生成它们(其中一些)。但是,如果我的类 (A) 派生自具有虚拟析构函数的抽象类,这是否意味着 A 类中的析构函数将被视为“用户定义的”?因此,移动语义是否不适用于此类A 的对象,因为编译器不会为我生成移动构造函数?
struct Interface {
virtual void myFunction() = 0;
virtual ~Interface() {};
};
struct A : public Interface {
void myFunction() override {};
};
【问题讨论】:
-
抽象类不能被实例化。
-
你用的是什么编译器?
-
@MikeMB 我没有使用任何特定的编译器。
-
如果你需要一个虚拟析构函数,但又不想抑制任何东西,你可以使用
virtual ~T() = default;
标签: c++ c++11 move-semantics