Stack.pop内存管理

时间:2012-07-15 13:18:38

标签: c++ memory-leaks clr managed-c++

Stack^ my_stack=gcnew Stack;
my_class^ a=gcnew my_class;
my_stack->Push(a);
my_stack->Push(gcnew my_class);
my_stack->Pop(); //will it cause memory leak?
a=gcnew my_class;
my_stack->Pop(); //will it cause memory leak?
抱歉,代码未经过测试。但我想你们都明白了我的意思。 当你弹出指针时,你会失去指针;记忆会被释放吗? 还有一种方法my_stack->Clear()对我来说也很困惑。

任何帮助都将不胜感激。

修改

@Konrad Rudolph

Pop()方法会调用析构函数本身,还是clr会自动检索内存空间?

Konrad Rudolph还建议我考虑仅使用通用集合类。

对于新的System::Collections::Generic::Stack<T> 它说'删除并返回堆栈顶部的对象' 如果是这样,如果我之前有另一个指针指向对象怎么办? 就是这样,

my_class^ a=gcnew my_class;
Stack<my_class>^ my_stack=gcnew Stack<my_class>;
my_stack->Push(a);
my_stack->Pop(); //what is a now? nullptr?

1 个答案:

答案 0 :(得分:0)

Pop不会调用析构函数。你可以使用像

这样的东西
T *topObject = my_stack->top();
my_stack->pop();
delete topObject;