c++ - Stack.pop 内存管理

标签 c++ memory-leaks clr managed-c++

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?

最佳答案

Pop 不调用析构函数。你可以使用类似的东西

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

关于c++ - Stack.pop 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11492237/

相关文章:

c++ - 创建一个非预定义大小的数组?

C++ 使错误 : object_var has not been declared

linux - ImageMagick 显示 GPU "memory leak"?

C++ CLR System::Diagnostics::Process,进程启动后重定向输出?

c# - 为什么 .NET JIT 编译器决定不内联或优化对没有副作用的空静态方法的调用?

compiler-construction - 从哪里获得 F# ILX2CIL 汇编程序?

c++ - "Inherit not, contain"或 "inherit, not contain"

c++ - select 函数中挂起的 fd 异常条件是什么?

linux - 有没有办法确定 Linux 中可用视频 RAM 的数量?

c++ - 为什么保留的虚拟内存会增长而当前正在使用的虚拟内存不会增长?