visual studio -这(崩溃)是VS2012 c++编译器中的一个bug吗?

visual studio - Is this (crash) a bug in VS2012 c++ compiler

本文关键字:一个 bug c++ studio 崩溃 visual VS2012 编译器      更新时间:2023-10-16

我正在用c++, Visual Studio 2012 (Professional, Update 4)编译以下代码

class dum {
    stringstream *ss;
    ~dum() {
        delete ss;
    }
public:
    dum() : ss(NULL) {}
};
int main()
{
    dum a;
    return 0;
}

现在我知道私有析构函数会强制只分配堆分配的对象,但我预计会出现编译错误。相反,我得到一个标题为"Microsoft (R) C/c++优化编译器"的窗口,上面写着

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

,然后通常提示联机,没有发生任何事情(或得到解决)。是我做错了什么,还是我偶然发现了编译器中的错误?

编辑

我发布的代码是win32控制台程序中存在的所有内容(即使main()也有这种无参数形式),唯一包含的头文件是sstream

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

尝试编译固定版本:

#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:usersrandmaniacdocumentsvisual studio 2012projectsdumdumdum.cpp(19): error C2248: 'dum::~dum' : cannot access private member declared in class 'dum'
1>          c:usersrandmaniacdocumentsvisual studio 2012projectsdumdumdum.cpp(8) : see declaration of 'dum::~dum'
1>          c:usersrandmaniacdocumentsvisual studio 2012projectsdumdumdum.cpp(6) : see declaration of 'dum'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

在我最近安装的VS2012中没有崩溃