动态内存重新分配
Dynamic memory reallocation
如果您动态分配一些空间,例如
struct node*py=new struct node;
struct node*tr=py;
delete py;
不应该分配的内存仍然存在,而不是被释放,因为我有另一个指针指向相同的地址之前的原始指针被删除?
No。这不是c++中内存分配的工作方式。
如果您使用new
分配内存,然后在其上调用delete
,则将被删除。一旦开始删除,内存管理器没有取消或中止删除的功能。c++倾向于完全按照你的要求去做,所以如果你真的不想释放一些内存,那么就不要在它上面调用delete
。
如果您想要引用计数,请尝试使用std::shared_ptr
(或boost::shared_ptr
,如果您还没有std
中的一个)。
不,堆管理器只做它被告知的事情并释放内存。
如果你想根据对内存的引用数量来保留内存,那么考虑使用引用计数指针,比如c++ 11的shared_ptr(参见Dr Dobbs)或boost的智能指针。
但是你自己说的-它只是一个指针,因此它不知道它指向什么。它只是蒙着眼睛指向某个地方。
不,在c/c++中,编译器/执行环境不跟踪对内存,new和free标记内存的引用是否在使用,任何引用计数或其他高阶垃圾收集都留给你的程序。
相关文章:
- 新分配指向函数的指针是否合法?
- 变体 - 分配新值时是否清理旧值?
- 分配新的零大小数组可以具有有效价值吗?
- 当我尝试为结构分配新指针时出现堆栈溢出错误
- 在函数返回中返回对新分配的shared_ptr的尊重合法吗
- 如何删除新分配的字符,这也是函数返回值?
- C ++中新分配的int的内存大小,有没有不同更好的方法来查看它?
- OpenSSL:当输出ptr为空时,BIGNUM的bin2bn不会分配新的BIGNUM
- 每次我分配新的位置时,都会隐式地称为destuructor
- 为什么这个指针到指针的二维数组像这样分配新的 int
- 如何创建对象变量,以便每次分配新的指针
- C 新操作员分配新内存
- 编译器忽略运算符新分配
- 方法向量的新/分配的复杂性::p ush_back
- 有没有一种方法可以全局填充新分配/删除分配
- 调用时为 std::function 分配新值
- 为什么我的新分配指针会自动在程序退出上删除
- 如果我尚未为指针分配新值,是否需要删除指针?
- OpenCV:为矩阵元素分配新值
- 在避免新分配的同时,const变量的复杂初始化