在C中,由于标准中的特殊子句允许编译器省略对返回语句产生的复制构造函数的调用,因此即使复制构造函数具有副作用,也不能依赖从return语句调用的复制构造函数.因此,编写复制构造函数除了复制构造实例之外还执行其他操作是不好的方式.
解决方法
Copy-elision同样适用于移动构造,它是完全相同的条款,复制构造和移动构造的省略统称为“复制省略”.
§12.8[class.copy] p31
When certain criteria are met,an implementation is allowed to omit the copy/move construction of a class object,even if the copy/move constructor and/or destructor for the object have side effects. […]