动态内存分配

时间:2013-04-15 16:44:47

标签: c++ pointers

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

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

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

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:4)

不,堆管理器只是执行它所说的内容并释放内存。

如果你想根据你对内存的引用数量来保留内存,那么考虑使用引用计数指针,例如C ++ 11 shared_ptr(参见,例如Dr Dobbs)或boost {{ 3}}

答案 2 :(得分:2)

但是你自己说了 - 它只是一个指针,所以它不知道它指向什么。它只是指向蒙着眼睛的地方。

答案 3 :(得分:1)

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