提问人:Yuan Wen 提问时间:3/30/2016 最后编辑:Yuan Wen 更新时间:3/31/2016 访问量:477
为什么赋值成本不能保证小于构造函数-析构函数对?
Why the cost of assignment is not guaranteed to be less than a constructor-destructor pair?
问:
在Scott Meyers的“有效C++”第26项:尽可能推迟变量定义中,赋值的成本肯定不会低于构造函数-析构函数对。
那么,对于不同的数据类型或类,如何将赋值的成本与构造函数-析构函数对进行比较呢?哪一个会更便宜,为什么?
在我看来,构造函数-析构函数对需要分配和释放内存,并且构造函数至少会初始化变量。但赋值只需要改变变量的值。
所以,我认为通常赋值的成本应该低于构造函数-析构函数对。
答:
8赞
Jonathan Wakely
3/30/2016
#1
我想你误解了这个建议。建议是说做“建造+销毁”比做“默认建造+转让+销毁”更便宜。
无论如何,不能保证作业更便宜,这取决于课程作者。并非所有构造函数都分配内存,也不是所有赋值都只是“更改变量的值”,有些赋值会重新分配,或者对值执行非平凡的检查。此外,一些任务是以构建+破坏的方式实现的,例如复制和交换成语:
T& operator=(const T& t) {
T(t).swap(*this);
return *this;
}
这个任务当然不比建筑便宜,因为它确实是建筑+交换+破坏。
评论
0赞
Yuan Wen
3/31/2016
你能告诉我什么时候转让会比建筑破坏便宜吗?@Jonathan韦克利
1赞
Jonathan Wakely
3/31/2016
我已经举了一个例子,其中作业更昂贵。当它不做更多工作时,它会更便宜。有无数可能的例子。
评论
int
int
int
int