【发布时间】:2010-04-27 17:32:57
【问题描述】:
我非常精通 C,在 C 中释放内存是必须的。
但是,我正在开始我的第一个 C++ 项目,并且我听说了一些关于您不需要通过使用共享指针和其他东西来释放内存的事情。
我应该在哪里阅读有关此内容的信息?这是正确的delete C++ 功能的有价值的替代品吗?它是如何工作的?
编辑
我很困惑,有人说我应该使用new 进行分配,并在释放过程中使用智能指针。
其他人说我不应该首先分配动态内存。
其他人说如果我使用 new 我也必须像 C 一样使用 delete。
那么,哪种方法被认为更标准并且更常用?
【问题讨论】:
-
你应该专注于尽可能不要动态创建东西,而不是担心如何释放它们。
-
@Luca:你所说的所有事情都是模棱两可的。 “担心”是什么意思?不删除任何东西?有时删?所有新的都需要删除,期间。但是我们尽可能使用自动分配,因此您可以将动态分配的对象(通过指针)存储到自动变量中,以便它们会自动删除它们。为了:尽可能避免动态分配,在需要时使用:使用 new 将其直接分配到自动分配的容器中,以免泄漏。如果这不可能,请确保将其删除!
-
@Luca:堆栈分配几乎总是好。您将知道在时机成熟时动态分配,或者您需要对象的寿命比它创建它的范围更长,或者您需要在运行时之前未知大小的内存。另请参阅stackoverflow.com/questions/2721128/… 在任何情况下,例如
std::string,它是动态分配的包装器,因此您无需担心分配或删除。std::string使用自动存储创建,以确保自动释放它所做的任何事情。 -
@bta:可能没有标准的方法,但很多聪明的人都会觉得很新鲜,删除是一种糟糕的编码习惯。 永远不要手动删除,把它包起来。
-
@bta:等等,什么?我的讽刺雷达坏了吗? :)
标签: c++ garbage-collection memory-management