什么是复制优化和返回值优化?
复制优化是大多数编译器实施的一种优化,可以防止在某些情况下出现额外的(可能很昂贵的)复制。因此,如果你有一些正在创建不使用的对象或没有副作用的代码,
示例
struct MyStruct { MyStruct() {} MyStruct(const MyStruct&) { std::cout << "Copied.\n"; } }; MyStruct f() { return MyStruct(); } int main() { std::cout << "Main\n"; MyStruct obj = f(); }
输出
根据编译器和设置,你可以获得以下任何输出 −
Main Main Copied Copied Main Copied
这意味着创建的对象比你预期的要少,因此你也不能依赖于调用特定数量的构造函数和析构函数。你不应该在拷贝/移动构造函数或析构函数中编写关键逻辑,因为你不能依赖于它们的调用。
广告