C++ 为什么分配临时指针似乎会导致堆栈溢出?

C++ 为什么分配临时指针似乎会导致堆栈溢出?,c++,stack-overflow,lifetime,temporary-objects,C++,Stack Overflow,Lifetime,Temporary Objects,在下面的示例中,当使用基于GCC版本4.3.3的目标powerpc编译器时,似乎每个Add方法调用都会增加堆栈的使用大小。直到今天我才知道, 调用Add方法之后,应该释放临时变量(我指的是临时指针,而不是对象) 在Windows中,使用Visual Studio 2012,它可以像我预期的那样工作,调用后堆栈大小会返回到以前的大小 你知道吗 Add.的签名: void ClassA::Add(ClassB* pObject); 以下代码不会产生堆栈溢出错误: ClassA* pContaine

在下面的示例中,当使用基于GCC版本4.3.3的目标powerpc编译器时,似乎每个
Add
方法调用都会增加堆栈的使用大小。直到今天我才知道, 调用
Add
方法之后,应该释放临时变量(我指的是临时指针,而不是对象)

在Windows中,使用Visual Studio 2012,它可以像我预期的那样工作,调用后堆栈大小会返回到以前的大小

你知道吗

Add.的签名:

void ClassA::Add(ClassB* pObject);
以下代码不会产生堆栈溢出错误:

ClassA* pContainer = new ClassA(paramsA);
ClassB* pItem = NULL;
{
    pItem = new ClassB(paramsB1);
    pContainer->Add(pItem); // Stack size same
    pItem = new ClassB(paramsB2);
    pContainer->Add(pItem); // Stack size same
    ... 
    pItem = new ClassB(paramsBN);
    pContainer->Add(pItem); // Stack size same.
}

我假设Add()并没有采用像const ClassB*&那样奇怪的参数,对吗?我能想到的唯一例外是绑定到const左值引用,在这种情况下,编译器可能会延长生存期。您真的遇到堆栈溢出吗?也许只要不接近stackframe限制,就没有必要(删除临时指针)?尝试实现堆栈溢出状态。
ClassA::Add
的签名是什么?如何确定堆栈大小?是否使用优化编译?你确定
Add
没有被窃听吗?我假设Add()没有接受一个像const ClassB*&那样奇怪的参数,对吗?我能想到的唯一例外是绑定到const左值引用,在这种情况下,编译器可能会延长生存期。您真的遇到堆栈溢出吗?也许只要不接近stackframe限制,就没有必要(删除临时指针)?尝试实现堆栈溢出状态。
ClassA::Add
的签名是什么?如何确定堆栈大小?是否使用优化编译?你确定
Add
没有被窃听吗?
ClassA* pContainer = new ClassA(paramsA);
ClassB* pItem = NULL;
{
    pItem = new ClassB(paramsB1);
    pContainer->Add(pItem); // Stack size same
    pItem = new ClassB(paramsB2);
    pContainer->Add(pItem); // Stack size same
    ... 
    pItem = new ClassB(paramsBN);
    pContainer->Add(pItem); // Stack size same.
}