这是(崩溃)VS2012 c ++编译器中的一个错误

时间:2014-03-23 10:27:16

标签: c++ visual-studio

我在c ++,Visual Studio 2012(专业版,更新4)中编译以下代码

class dum {
    stringstream *ss;
    ~dum() {
        delete ss;
    }
public:
    dum() : ss(NULL) {}
};

int main()
{
    dum a;
    return 0;
}

现在我知道私有析构函数只会强制堆分配对象,但我希望编译错误。相反,我得到一个标题为“Microsoft(R)C / C ++ Optimizing compiler”的窗口

  

Microsoft(R)C / C ++优化编译器已停止工作。 Windows可以在线检查问题的解决方案

然后通常提示上线,没有任何反应(或得到解决)。我做错了什么或者我偶然发现了编译器中的错误?

编辑

我发布的代码就是win32控制台程序中的所有内容(即使main()也没有参数形式),唯一包含的标题是sstream

如果将析构函数移动到类的公共部分,我们不会再发生崩溃,但正如我上面提到的,这应该是编译错误的原因(namelly 无法访问在dum中声明的私有成员)而不是这个弹出窗口。 这个问题针对那些可以提供内在或两个关于编译器问题的内在的人,我以前见过类似的问题,但这是造成这种事情的最小代码段。

1 个答案:

答案 0 :(得分:2)

尝试编译固定版本:

#include <sstream>

using namespace std;

class dum {
    stringstream *ss;
    ~dum() {
        delete ss;
    }
public:
dum() : ss(NULL) {}
};

int main()
{
    dum a;
    return 0;
}

为我提供以下编译错误。 尝试使用VS2012 Ultimate Version 11.061030.00 Update4。

1>------ Build started: Project: dum, Configuration: Debug Win32 ------
1>  dum.cpp
1>c:\users\randmaniac\documents\visual studio 2012\projects\dum\dum\dum.cpp(19): error C2248: 'dum::~dum' : cannot access private member declared in class 'dum'
1>          c:\users\randmaniac\documents\visual studio 2012\projects\dum\dum\dum.cpp(8) : see declaration of 'dum::~dum'
1>          c:\users\randmaniac\documents\visual studio 2012\projects\dum\dum\dum.cpp(6) : see declaration of 'dum'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

对于我最近安装的VS2012没有崩溃。