例如,如果您动态分配一些空间
struct node*py=new struct node;
struct node*tr=py;
delete py;
分配的内存不应该仍然保留而不被释放,因为在删除指向同一地址的原始指针之前,我确实有另一个指向同一地址的指针?
不,这根本不是 C++ 中内存分配的工作方式。
如果您使用 分配内存new
,然后调用delete
它,它将被删除。内存管理器无法在删除开始后取消或中止删除。C++ 倾向于完全按照你的要求去做,所以如果你真的不想释放一些内存,那么不要调用delete
它。
如果您想要引用计数,请尝试使用std::shared_ptr
(或者boost::shared_ptr
,如果您还std
没有)。
但是您自己说过-它只是一个指针,因此它不知道它指向什么。它只是指向一个被蒙住眼睛的地方。
不,在 c/c++ 中,编译器/执行环境不会跟踪对内存的引用、新的和空闲的标记内存是否正在使用中,并且任何引用计数或其他更高阶的垃圾收集都留给您的程序。