以下代码调用析构函数 4 次:
#include<iostream>
using namespace std;
class A{
public:
A(){cout<<"A"<<endl;}
~A(){cout<<"~A"<<endl;}
A f(){cout<<"F"<<endl; A b; return b;}
};
int main(){
A a,b;
b=a.f();
}
输出:
A
A
F
A
~A
~A
~A
~A
有人能解释一下吗? 我在想应该只有三个析构函数调用。
最佳答案
main()
中有两个对象,因此析构函数将被调用两次 只是因为它们。 f()
中的一个对象,因此析构函数将因此被调用一次。总共 3 次(如您所料,但请继续阅读……)
现在第四次为从 f
返回时创建的临时对象调用析构函数。这只有在根本没有 RVO 时才会发生。 RVO 是编译器的选择,这意味着它可能会优化它,也可能不会。该语言不对 RVO 提供任何保证。
无论如何,提高你的优化水平;我相信您最多只会看到 3 个析构函数调用。
关于c++ - 返回值优化 - C++ - 析构函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9248118/