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

时间:2014-12-16 06:28:54

标签: c++ cstring

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

CString f(){

CString s = g();

return s;

}

const char* g(){ return new char[5]; }

谢谢:)

2 个答案:

答案 0 :(得分:6)

不一定。

如果您的编译器实现了返回值优化(RVO),那么它可以设置对f()的调用,以便在调用者存储返回值的地方构造s,因此它可以忽略调用CString拷贝构造函数和析构函数。此优化是C ++标准允许的少数例外优化规则之一。

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

答案 1 :(得分:0)

编译器将在完成函数执行时调用任何不再存在的对象的析构函数。由于s被声明为函数f()的本地对象,因此本地对象(如s)将不复存在,因此,编译器将调用它们的析构函数。