2012-07-15 138 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