C++中的不可变类和内存

mon*_*jbl 2 c++ memory memory-management class immutability

所以,作为我正在研究的个人项目的一部分,我正在深入学习C++,而不是在学校.我是一名Java开发人员,因此内存管理有点难以再次习惯,而现在我正在以某种方式编写代码,我有一个关于不可变类的快速问题.

当我将它们视为一个概念时,我当然将它们与Java中的Strings进行比较.但是现在我在C++中,重新分配操作可能会造成内存泄漏(至少,我认为它可以).所以现在如果我这样做:

  MyImmutableClass a ("blah");
  a = a.modifyInSomeWay();
Run Code Online (Sandbox Code Playgroud)

其中modifyInSomeWay返回MyImmutableClass的新实例,我没有调用解构函数.在这里我是否有一些东西可以防止第一次分配"a"在内存中留下来?

Gre*_*ill 5

在这种情况下你所描述的赋值运算符MyImmutableClass调用来分配的右边复制到左边(覆盖无论是在左侧).如果你的类确实是不可变的,它甚至不会一个可访问的赋值运算符,你将得到一个编译错误.

如果你的对象是可变的,你做的有(正确)赋值运算符,那么就没有内存泄漏,因为在左手侧的数据析构函数将运行在必要时释放内存.但是,编写正确的赋值运算符对某些类来说可能很棘手.

这种直接分配给(用户定义的)对象的概念在Java中不存在,因为在那里一切都是引用.