动态内存重新分配

Dynamic memory reallocation

本文关键字:分配 新分配 内存 动态      更新时间:2023-10-16

如果您动态分配一些空间,例如

    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标记内存的引用是否在使用,任何引用计数或其他高阶垃圾收集都留给你的程序。