【发布时间】:2016-07-18 02:52:36
【问题描述】:
在 Scott Meyers 的“Effective C++”第 26 条:尽可能长时间地推迟变量定义中,赋值的成本肯定不会低于构造函数-析构函数对。
那么,对于不同的数据类型或类,我如何比较赋值与构造函数-析构函数对的成本?哪一个会更便宜,为什么?
在我看来,构造函数-析构函数对需要分配和释放内存,而构造函数至少会初始化变量。但是赋值只需要改变变量的值。
因此,我认为通常赋值的成本应该低于构造函数-析构函数对。
【问题讨论】:
-
谁说构造函数总是需要分配内存?您如何保证更改
int的值的成本低于构建int的成本?如果你不能保证对于int,你如何保证对于具有int成员的简单类型? -
如果您在函数中创建一个对象,将其返回,然后 A) 将其分配给现有变量或 B) 从中构造一个新变量,那么 B) 可能会更快,因为返回值优化。
-
"构造函数-析构函数对需要分配和释放内存" 为什么这么说呢?例如,为什么RAII lock holder 需要分配任何内存?
-
哦,我明白了。但是对于需要分配内存的类,会发生什么?@David Schwartz@JonathanWakely
标签: c++ constructor destructor assignment-operator