相关疑难解决方法(0)

为什么析构函数会禁用隐式移动方法的生成?

我试着通过阅读这篇博客来了解零的规则.IMO,它说如果你声明自己的析构函数,那么不要忘记创建移动构造函数并将赋值移动为默认值.

示例:

class Widget {
public:
  ~Widget();         // temporary destructor
  ...                // no copy or move functions
};
Run Code Online (Sandbox Code Playgroud)

"添加析构函数会产生禁用生成移动函数的副作用,但由于Widget是可复制的,因此用于生成移动的所有代码现在都会生成副本.换句话说,向类中添加析构函数可能会导致 - 有效的动作可以用可能效率低下的副本无声地替换".

Scott Meyers的上述文字在引言中提出了一些问题:

  • 为什么声明析构函数会隐藏移动语义?
  • 声明/ definig析构函数只隐藏移动语义或复制构造函数和复制赋值以及隐藏移动语义吗?

c++ destructor move c++11 rule-of-zero

16
推荐指数
2
解决办法
2463
查看次数

标签 统计

c++ ×1

c++11 ×1

destructor ×1

move ×1

rule-of-zero ×1