如果我从方法返回CString会发生什么?它会调用CString的析构函数吗?
CString f(){
CString s = g();
return s;
}
const char* g(){ return new char[5]; }
Run Code Online (Sandbox Code Playgroud)
谢谢 :)
不必要.
如果你的编译器实现返回值优化(RVO),然后它可以设置呼叫f(),从而s构造是主叫将存储返回值,因此它的Elid可向呼叫CString拷贝构造函数和析构函数.此优化是C++标准允许的为as-if优化规则的少数例外之一.
如果您在禁用所有优化的情况下进行编译,则可能会CString在处理调用时看到对复制构造函数和析构函数的一次或多次调用f().
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |