我有一个基类Base
和一个派生类D
,我希望编译器为我自动生成移动构造函数和移动赋值运算符。遵循零规则,我将所有内存管理留给编译器,并且只使用 2 级类(没有原始指针、数组等):
#include <iostream>
class Base{
public:
Base(): a_(42) {}
virtual void show() { std::cout << "Base " << a_ << std::endl; }
private:
int a_;
};
class D : Base {
public:
D(): b_(666) {}
void show() { std::cout << "D " << b_ << std::endl; }
private:
int b_;
};
int main() {
Base b;
b.show();
D d;
d.show();
return 0;
}
应该是这个吧?
输入C++ 核心指南:
基类析构函数应该是公共的和虚拟的,或者是受保护的和非虚拟的。
啊,所以我想我必须在Base
. 但这将取消自动生成的移动功能!
这里有什么干净的出路?