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()
这也让我感到困惑。
如有任何帮助,我们将不胜感激。
编辑:
@康拉德·鲁道夫
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?
最佳答案
Pop 不调用析构函数。你可以使用类似的东西
T *topObject = my_stack->top();
my_stack->pop();
delete topObject;
关于c++ - Stack.pop 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11492237/