【问题标题】:C++ Variable destructionC++ 变量销毁
【发布时间】:2020-09-17 18:45:29
【问题描述】:

假设我有这个:

std::wstring str = std::to_wstring(100);
str = std::to_wstring(1000); // Is the previous str destroyed?

如果我将局部变量重新分配给另一个变量,旧的会被销毁吗?

【问题讨论】:

  • 如果这是问题,则没有内存泄漏。 operator= 将处理动态内存
  • 您展示的所有内容都是自动存储。无需担心内存管理。
  • 嗯,好的。谢谢,只是需要确定

标签: c++ memory-management scope


【解决方案1】:

旧的就是新的,只复制成员。考虑一个简单的赋值实现:

struct foo {
    int value;
    foo& operator=(const foo& other) {
       value = other.value;
       return *this;
    }
};

分配a = b; 后,对象a 仍然是同一个对象。如果foo 管理资源,operator= 当然必须考虑到这一点,您可以放心地假设所有标准容器都没有损坏。

【讨论】:

  • 也谢谢你!
  • 关于最后一句话,见the Rules of Three, Five, and Zero。如果不牢牢掌握这三个规则,就无法编写出有效和高效的 C++ 代码。
  • @user4581301 我不记得我什么时候需要的不仅仅是零规则。
  • @idclev463035818 前几天不得不制作一个vector 的串行端口包装器。我认为零规则是所有班级都应该努力的标准,但是当你深入研究时,选择是三、五或the Balrog
  • @user4581301 实际上我忘记了我写的所有 RAII 类型,忘记计算它们,也许是因为在这种情况下我喜欢使用它们而不是“需要”;)虽然我依赖于记忆尽可能使用智能指针和容器
【解决方案2】:

之前的str被销毁了吗?

是的。你分享的sn-p代码中没有发生内存管理,都是自动存储。

【讨论】:

  • 谢谢!当stackoverflow让我时,我会在9分钟内接受答案
猜你喜欢
  • 2012-12-23
  • 2013-01-19
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 2018-01-21
  • 1970-01-01
相关资源
最近更新 更多