什么是复制消除和返回值优化?
复制消除是大多数编译器实现的一种优化,用于在某些情况下防止额外的(潜在的昂贵)复制。因此,如果您有一些创建对象不会被使用或没有副作用的代码,
例子
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
这意味着创建的对象少于您的预期,因此您也不能依赖于调用某个特定数量的构造函数和析构函数。您不应该在复制/移动构造函数或析构函数中使用关键逻辑,因为您不能依赖于它们被调用。
广告