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

Why the cost of assignment is not guaranteed to be less than a constructor-destructor pair?

本文关键字:构造函数 小于 析构函数 赋值 不能 为什么      更新时间:2023-10-16

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

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

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

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

我想你误解了这个建议。该建议称,"建造+销毁"比"默认建造+分配+销毁"更便宜。

无论如何,不能保证作业更便宜,这取决于课程作者。并不是所有的构造函数都分配内存,也不是所有的赋值都只是"更改变量的值",有些赋值会重新分配,或者对值执行非琐碎的检查。此外,一些分配是按照构建+销毁的方式实现的,如复制和交换习惯用法:

T& operator=(const T& t) {
  T(t).swap(*this);
  return *this;
}

这个任务肯定不比建造便宜,因为它可以进行建造+交换+销毁。