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?
答案 0 :(得分:0)
Pop不会调用析构函数。你可以使用像
这样的东西T *topObject = my_stack->top();
my_stack->pop();
delete topObject;