0

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

    struct node*py=new struct node;
    struct node*tr=py;
    delete py;

分配的内存不应该仍然保留而不被释放,因为在删除指向同一地址的原始指针之前,我确实有另一个指向同一地址的指针?

4

4 回答 4

4

不,堆管理器只是按照它的指示去做并释放内存。

如果您想根据对内存的引用次数来保留内存,请考虑使用引用计数指针,例如 C++11 shared_ptr(例如,参见Dobbs 博士)或 boost 的智能指针

于 2013-04-15T16:52:19.463 回答
4

不,这根本不是 C++ 中内存分配的工作方式。

如果您使用 分配内存new,然后调用delete它,它将删除。内存管理器无法在删除开始后取消或中止删除。C++ 倾向于完全按照你的要求去做,所以如果你真的不想释放一些内存,那么不要调用delete它。

如果您想要引用计数,请尝试使用std::shared_ptr(或者boost::shared_ptr,如果您还std没有)。

于 2013-04-15T16:46:52.327 回答
2

但是您自己说过-它只是一个指针,因此它不知道它指向什么。它只是指向一个被蒙住眼睛的地方。

于 2013-04-15T16:46:35.357 回答
1

不,在 c/c++ 中,编译器/执行环境不会跟踪对内存的引用、新的和空闲的标记内存是否正在使用中,并且任何引用计数或其他更高阶的垃圾收集都留给您的程序。

于 2013-04-15T16:46:55.343 回答