【发布时间】:2019-06-16 01:20:52
【问题描述】:
根据 cpp 参考 cpp-ref,如果我们有用户定义的析构函数,编译器不会生成默认的移动构造函数。
代码sn-p:
class General
{
public:
~General();
General();
void testInitList();
};
int main(int argc, char **argv) {
General b(std::move(General()));
General g = std::move(b);
g.testInitList();
return 0;
}
代码编译意味着编译器生成了一个默认的移动构造函数。代码使用 gcc 版本 5.4.0 编译。
有人可以解释为什么编译器在这种情况下生成了一个移动构造函数和移动赋值运算符,尽管有一个析构函数?
最好, 拉胡尔
【问题讨论】:
-
首先,它编译。其次,我在构造函数和析构函数中有打印语句。只打印了一个构造函数语句,而打印了多个析构函数语句。
-
您没有定义复制构造函数,这就是您没有足够的打印的原因。
-
嗯。好的,让我试试。
-
是的,你是对的。非常感谢您的帮助
标签: c++ move-constructor