【问题标题】:is Assigning object to statically created object cause memory leak in C++?将对象分配给静态创建的对象会导致 C++ 中的内存泄漏吗?
【发布时间】:2020-03-06 15:37:09
【问题描述】:

我是 C++ 新手,我知道动态创建的对象应该手动释放, 但是我想如果 Object 如下静态创建,它会在将其分配给另一个对象时导致内存泄漏,或者新对象覆盖旧对象,假设我们有一个名为 Test 的类。

Test t;
t = Test() ;

【问题讨论】:

  • 如果不使用new,则不会出现内存泄漏(过于简单但对初学者来说很好)
  • 我不清楚你关心的是哪个对象。您是否担心t 所指的原始Test 被泄露,或者您是否担心Test() 中的临时Test 可能会泄露?
  • 如果你根本不直接使用new,你几乎不用担心内存泄漏。请改用std::stringstd::vectorstd::unique_ptr。不仅出于这个原因,强烈建议这样做。
  • @FrançoisAndrieux 是的,我的意思是你指出的第一个场景,第一行代码的旧分配空间会发生什么?
  • @M.eid 你可能对其他语言如 Java 或 Python 感到困惑。 C++ 使用值语义。 t = Test(); 复制默认构造到 t 中的临时 Test 对象的值(或状态)。但是t 只要存在就一直是t。在那些其他语言中,对象变量更像是对象的指针或句柄,您可以更改Test 变量t 所指的对象。一个后果是无法更改对象的地址。

标签: c++ object memory-leaks static


【解决方案1】:

将对象分配给静态创建的对象会导致 C++ 中的内存泄漏吗?

一般不会。并且不适用于任何精心设计的课程。

但是如果赋值运算符有内存泄漏,那么调用该运算符确实会导致内存泄漏。

【讨论】:

    猜你喜欢
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2017-06-28
    • 2012-02-05
    • 1970-01-01
    • 2015-12-26
    相关资源
    最近更新 更多