我在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中声明的私有成员)而不是这个弹出窗口。 这个问题针对那些可以提供内在或两个关于编译器问题的内在的人,我以前见过类似的问题,但这是造成这种事情的最小代码段。
答案 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没有崩溃。