为什么不能保证赋值的成本低于构造函数析构函数对?

Yua*_*Wen -1 c++ constructor destructor assignment-operator

在Scott Meyers的"Effective C++"中第26项:尽可能推迟变量定义,赋值的成本肯定不会低于构造函数 - 析构函数对.

然后,对于不同的数据类型或类,如何将赋值的成本与构造函数 - 析构函数对进行比较?哪一个会更便宜?为什么?

在我看来,构造函数 - 析构函数对需要分配和释放内存,而构造函数至少会初始化变量.但是赋值只需要改变变量的值.

所以,我认为一般来说,赋值的成本应该小于构造函数 - 析构函数对.

Jon*_*ely 8

我想你误解了这个建议.建议说,"建筑+破坏"比"默认建筑+任务+破坏"更便宜.

在任何情况下,都不能保证作业更便宜,这取决于班级作者.并非所有构造函数都分配内存,并非​​所有赋值都只是"更改变量的值",某些赋值重新分配,或者对值执行非平凡的检查.此外,一些任务是在构造+破坏方面实现的,如在复制和交换习语中:

T& operator=(const T& t) {
  T(t).swap(*this);
  return *this;
}
Run Code Online (Sandbox Code Playgroud)

这项任务肯定不比建筑便宜,因为它建筑+交换+销毁.