返回CString会调用析构函数吗?

Sam*_*gha 0 c++ cstring

如果我从方法返回CString会发生什么?它会调用CString的析构函数吗?

CString f(){

CString s = g();

return s;

}

const char* g(){ return new char[5]; }
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

cdh*_*wie 6

不必要.

如果你的编译器实现返回值优化(RVO),然后它可以设置呼叫f(),从而s构造是主叫将存储返回值,因此它的Elid可向呼叫CString拷贝构造函数和析构函数.此优化是C++标准允许的为as-if优化规则的少数例外之一.

如果您在禁用所有优化的情况下进行编译,则可能会CString在处理调用时看到对复制构造函数和析构函数的一次或多次调用f().