【发布时间】:2020-03-06 15:37:09
【问题描述】:
我是 C++ 新手,我知道动态创建的对象应该手动释放,
但是我想如果 Object 如下静态创建,它会在将其分配给另一个对象时导致内存泄漏,或者新对象覆盖旧对象,假设我们有一个名为 Test 的类。
Test t;
t = Test() ;
【问题讨论】:
-
如果不使用
new,则不会出现内存泄漏(过于简单但对初学者来说很好) -
我不清楚你关心的是哪个对象。您是否担心
t所指的原始Test被泄露,或者您是否担心Test()中的临时Test可能会泄露? -
如果你根本不直接使用
new,你几乎不用担心内存泄漏。请改用std::string、std::vector和std::unique_ptr。不仅出于这个原因,强烈建议这样做。 -
@FrançoisAndrieux 是的,我的意思是你指出的第一个场景,第一行代码的旧分配空间会发生什么?
-
@M.eid 你可能对其他语言如 Java 或 Python 感到困惑。 C++ 使用值语义。
t = Test();复制默认构造到t中的临时Test对象的值(或状态)。但是t只要存在就一直是t。在那些其他语言中,对象变量更像是对象的指针或句柄,您可以更改Test变量t所指的对象。一个后果是无法更改对象的地址。
标签: c++ object memory-leaks static