c++ - 这会导致 C++ 中的内存泄漏吗?

标签 c++ pointers memory-leaks reference memory-management

我对 C++ 内存管理有疑问,这(显然)与引用和指针有关。假设我有一个类 Class 和一个方法 my_method:

OtherClass& Class::my_method( ... ) {
    OtherClass* other_object = new OtherClass( ... );
    return *other_object;
}

同时在附近的一段代码中:

{
    Class m( ... );
    OtherClass n;
    n = m.my_method( ... );
}

所以,我知道有一条关于指针的一般规则(~“任何新版本,必须是 delete-d”)以避免内存泄漏。但基本上我正在引用我的堆分配对象,所以当 n 超出范围时,不应该调用 OtherClass 的析构函数从而释放之前由 other_object 指向的内存吗? 所以最后真正的问题是:这会导致内存泄漏吗?

谢谢。

最佳答案

是的,这会导致内存泄漏。

您要做的是,在返回语句中取消引用您创建的新对象。编译器将调用赋值运算符作为返回的一部分,并将新对象的内容复制到调用方法中分配给它的对象。

新对象将留在堆上,其指针从堆栈中清除,从而造成内存泄漏。

为什么不返回一个指针并以这种方式管理它?

关于c++ - 这会导致 C++ 中的内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/475888/

相关文章:

c - 将矩阵传递给 C 中的方法

c++ - STL map and list using in c++的一些问题

haskell - 调试堆分析中未显示的内存泄漏

java - JMX RMI - 内存泄漏 - ArrayNotificationBuffer 随着时间的推移越来越大

c++ - 将 libusb 库添加到 osx 中的 Qt 项目

c++ - boost::fiber 调度 - 何时以及如何

c - C 如何计算这个表达式? C指针

c++ - C++ 中 float 的 Setprecision()?

c++ - 在 Airplay SDK 中,Iw2DCreateImage 在大于 360x360 像素的 png 上返回堆 0 内存不足问题

c++ - 节点和链表的问题