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

ポップはデストラクタを呼び出しません。あなたは次のようなものを使うことができます

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