返回该对象(而不是指针)时是不是要调用析构函数?

时间:2010-02-21 03:40:15

标签: c++ destructor

我有一个功能:

static Bwah boo(){
   Bwah bwah;
   return bwah;
}

主要功能:

int main(){
   Bwah boo = Assigner::boo();
   cout << "got here.." << endl;
}

Bwah的析构函数仅在“到达”打印后被调用一次。 这是保证还是编译器优化?

1 个答案:

答案 0 :(得分:10)

这是一种称为返回值优化(RVO)的优化。这是一种常见的优化,但你不能依赖它。

以下是两个非常好的学习链接:

  1. 首先,有关pass by value, rvalue semantics, the return value optimization, and rvalue references and the move constructor and assignment operator in C++0x
  2. 的详细文章
  3. 第二,好旧的待机维基百科和their entry on the return value optimization
  4. 维基百科的文章特别直接解决了您的问题。但另一篇文章更深入地探讨了整个问题。