为什么不能保证赋值成本小于构造函数-析构函数对?
Why the cost of assignment is not guaranteed to be less than a constructor-destructor pair?
在 Scott Meyers 的 "Effective C++" 项目 26:尽可能长时间地推迟变量定义,赋值的成本肯定不低于构造函数-析构函数对。
那么,对于不同的数据类型或 类,我如何比较构造函数-析构函数对的赋值成本?哪个更便宜,为什么?
在我看来,构造函数-析构函数对需要分配和释放内存,而构造函数至少会初始化变量。但是赋值只需要改变变量的值即可。
所以,我认为通常赋值的成本应该低于构造函数-析构函数对。
我认为您误解了建议。建议说 "construction + destruction" 比 "default construction + assignment + destruction" 便宜。
无论如何,不能保证分配更便宜,这取决于class作者。并非所有构造函数都分配内存,并非所有赋值都只是 "change the value of variable",一些赋值会重新分配或对值执行重要检查。此外,一些赋值是根据构造+破坏来实现的,如复制和交换习语:
T& operator=(const T& t) {
T(t).swap(*this);
return *this;
}
这个assignment肯定不比construction便宜,因为它是construction+swap+destruction。
在 Scott Meyers 的 "Effective C++" 项目 26:尽可能长时间地推迟变量定义,赋值的成本肯定不低于构造函数-析构函数对。
那么,对于不同的数据类型或 类,我如何比较构造函数-析构函数对的赋值成本?哪个更便宜,为什么?
在我看来,构造函数-析构函数对需要分配和释放内存,而构造函数至少会初始化变量。但是赋值只需要改变变量的值即可。
所以,我认为通常赋值的成本应该低于构造函数-析构函数对。
我认为您误解了建议。建议说 "construction + destruction" 比 "default construction + assignment + destruction" 便宜。
无论如何,不能保证分配更便宜,这取决于class作者。并非所有构造函数都分配内存,并非所有赋值都只是 "change the value of variable",一些赋值会重新分配或对值执行重要检查。此外,一些赋值是根据构造+破坏来实现的,如复制和交换习语:
T& operator=(const T& t) {
T(t).swap(*this);
return *this;
}
这个assignment肯定不比construction便宜,因为它是construction+swap+destruction。