9

在阅读了 Herb Sutter 博客上的这篇文章后,我做了一些实验,遇到了一些让我困惑的事情。我正在使用 Visual C++ 2005,但如果这取决于实现,我会感到惊讶。

这是我的代码:

#include <iostream>

using namespace std;

struct Base {
    //Base() {}
    ~Base() { cout << "~Base()" << endl; }
};

int main()
{
    const Base & f = Base();
}

运行时,它会显示“ ~Base()两次...但是如果我取消注释构造函数,它只会显示一次

有人对此有解释吗?

4

1 回答 1

24

这取决于实现。

该标准允许在将临时绑定到 const 引用时发生副本。在您的情况下,VC++ 仅在隐式定义构造函数时执行复制。这是出乎意料的,但也是允许的。

C++1x将解决这个问题

于 2009-04-17T14:15:57.937 回答