我对 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/