【发布时间】:2011-05-17 00:35:32
【问题描述】:
因此,作为我正在从事的个人项目的一部分,我对 C++ 的了解比在学校时更深入。我是一名 Java 开发人员,所以要再次适应内存管理有点困难,现在我要不遗余力地编写某种方式的代码,我有一个关于不可变类的快速问题。
当我将它们视为一个概念时,我当然会将它们与 Java 中的字符串进行比较。但是现在我在 C++ 中,重新分配操作可能会造成内存泄漏(或者至少,我认为它可以)。所以现在如果我这样做:
MyImmutableClass a ("blah");
a = a.modifyInSomeWay();
其中 modifyInSomeWay 返回一个新的 MyImmutableClass 实例,我没有调用解构函数。我在这里遗漏了什么可以防止“a”的第一个分配留在内存中吗?
【问题讨论】:
-
如果您将赋值视为类似 Java 的赋值,则需要
a作为指针。这是赋值运算符。 -
我同意@Greg 的观点,即不可变对象甚至不应该允许重新分配。但是要回答您的问题,这一切都归结为赋值运算符,以及它是如何为给定类重载的。请参阅copy-and-swap idiom 上的说明。
标签: c++ class memory memory-management immutability