Управление памятью 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;
Другие вопросы по тегам