第一个函数会多一次析构函数的调用是因为在返回 p 时,会触发一次拷贝构造函数的调用,这是因为返回类型为 person,而 p 是一个局部变量,需要将其拷贝给返回值。

第二个函数不会多一次析构函数的调用是因为返回类型为 person &,即返回一个引用,不需要进行拷贝构造函数的调用。所以不会有额外的析构函数调用。

' -fno-elide-constructors ' 参数可以禁用编译器的 RVO(返回值优化)优化,强制进行拷贝构造函数的调用。所以即使第二个函数返回的是引用,也会进行一次拷贝构造函数的调用。

C++ 类成员函数返回值优化 (RVO) 与析构函数调用分析

原文地址: https://www.cveoy.top/t/topic/Kyw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录