gpt4 book ai didi

c++ - 返回新指针时的内存管理

转载 作者:行者123 更新时间:2023-11-28 02:59:26 25 4
gpt4 key购买 nike

我有一个方法定义为

class1* class1::create(something)
{
class1* a = new class1(*this);
a->somemethod(something);
return a;
}

我在别处称之为

class1* b = c::create(something);

所以我的问题是这会泄漏内存吗?如果不是,为什么?

最佳答案

是的,它会泄漏内存,除非调用者删除了b。为什么?因为对 new 的每次调用都必须与对 delete 的调用相匹配。

请注意,这是一种危险且异常不安全的模式:最好返回管理其自身资源的内容,而不是将责任推给调用者。您可以返回一个智能指针(std::unique_ptr 似乎是最合适的选项),或者只是按值返回一个 class1 实例,而不是返回一个指针。

关于为什么它是一个麻烦的接口(interface)的更多信息:指针在 C++ 中可以是很多东西。它可以是指向您可能需要删除或不需要删除的实例的指针。它可能是指向数组中第一个元素的指针,它可能是也可能不是动态分配的。所以调用者必须知道是调用deletedelete[],还是什么都不调用。那是在不考虑异常(exception)情况的情况下。如果在调用 class1::createdelete b 之间引发异常,则不会删除该对象。因此,使用管理自身资源的类型非常重要。

关于c++ - 返回新指针时的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21218976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com