以下代码导致Visual Studio 2015致命错误C1060:编译器超出堆空间。 如果我使用64位版本的编译器它为这个样本吃超过25Gb的ram。 Visual Studio 2012和2010工作正常。这是编译器错误吗?
class Test
{
public:
Test() :
m_val1(0),
m_val2(0)
{
}
Test(Test *val1) :
m_val1(val1),
m_val2(0)
{
}
Test(Test *val1, Test *val2) :
m_val1(val1),
m_val2(val2)
{
}
~Test()
{
if (m_val1)
delete m_val1;
if (m_val2)
delete m_val2;
}
private:
Test* m_val1;
Test* m_val2;
};
int main()
{
Test t(new Test(new Test(new Test(new Test(new Test(new Test(new Test(new Test(new Test(
new Test(new Test(new Test),
new Test(new Test(new Test(new Test(new Test(new Test(),
new Test()),
new Test(new Test(),
new Test(new Test(new Test(new Test(new Test(new Test(new Test(new Test(new Test(new Test(new Test(),
new Test())))))))))))
)))))))))))))));
return 0;
}
答案 0 :(得分:0)
这是一个错误。最小的代码如下。
如果函数的数量足够小,编译器会发出两个警告:main::A a(...prototyped function not called (was a variable definition intended?)
和'a': unreferenced local variable
;否则,在我的电脑上,它会挂起。
如果用括号替换括号,为了消除歧义,一切都很好。
int main()
{
class A {};
A a( A( A( A( A( A( A( A( A( A( A( A( A( A( A( A( A( A( A( A( A( A( A( A( ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) );
// fine: A a{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{ A{} } } } } } } } } } } } } } } } } } } } } } } };
return 0;
}