2012-07-15 143 views
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()这也困惑我。Stack.pop内存管理

任何帮助,将不胜感激。

编辑:

@Konrad鲁道夫

请问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

为什么你甚至会把原始指针放在你的容器中? – 2012-07-15 13:20:01

+0

它的工作方式是...这里检查[链接](http://msdn.microsoft.com/en-us/library/system.collections.stack.push.aspx) – Immueggpain 2012-07-15 13:21:16

+0

@KerrekSB什么原始指针? – 2012-07-15 13:27:04

回答

0

Pop不调用析构函数。你可以使用类似于

T *topObject = my_stack->top(); 
my_stack->pop(); 
delete topObject; 
+0

它是托管的C++,你似乎使用本机代码... – Immueggpain 2012-07-15 13:47:22

+0

哦,是的,我的答案是本机代码...没有托管代码exp。 – msk 2012-07-15 13:48:45