Следующий код элементарно компилится в Visual Studio 2010 и 2012.
В 2015-компилятор отжирает памяти сколько может, потом валится с ошибкой.
Если использовать 64битный компилятор, то справляется использовав больше 20гиг оперативы.
Чем больше уровней вложения тем больше памяти требуетсяб причем (как мне кажется) зависимость нелинейная.
Как-то обойти можно?
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;
}