是什么让堆分配的对象在 C++ 中“被引用”?

Abd*_*oud 2 c++ memory allocation heap-memory

在 C++ 中,什么决定了要引用的堆分配对象?Mark Allen Weiss 在他的《Data Structures and Algorithm Analysis in C++》一书中写道“当一个对象被new 分配时不再被引用,删除操作必须应用于该对象(通过一个指针)”我觉得这句话有点令人困惑的是,我所理解的是指针持有对内存地址的引用,但是表示该地址的对象如何被其他东西引用?当其他东西不再引用它时,我必须调用删除?

Dav*_*rtz 6

我不会太沉迷于那里语言的精确选择。他想说的是,如果您在堆上分配了一个对象,则您有责任在完成后取消分配。否则,它将保持有效并浪费内存。

即使对象仍然被引用,您也可以完全使用它。确切地说,何时删除对对象的所有引用以及何时取消分配由您决定。关键是您绝对不想在取消分配后尝试使用它,并且您也不希望在很长一段时间内无法取消分配大量对象并浪费内存。

幸运的是,在现代 C++ 中,您有许多工具可以使这变得更容易,包括移动语义,unique_ptr等等。