1
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?
4

1 回答 1

0

Pop 不调用析构函数。你可以使用类似的东西

T *topObject = my_stack->top();
my_stack->pop();
delete topObject;
于 2012-07-15T13:25:21.073 回答