Управление памятью Stack.pop
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 автоматически получит пространство памяти?
Конрад Рудольф также предлагает мне рассмотреть возможность использования только общих классов коллекций.
Для нового 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?
1 ответ
Решение
Поп не называет деструктором. Вы можете использовать что-то вроде
T *topObject = my_stack->top();
my_stack->pop();
delete topObject;