返回指针的函数是否要求我删除返回的值?

Sir*_*ton -2 c++ pointers function

假设我有一个执行某些任务的函数。该函数返回一个指向int的指针。我的问题是:我是否必须取消分配内存,还是可以使用这种通用格式?


int *do_something()
{
    int *local{ new int };
    //do_something_here

    return local;
    delete local;
}

int main()
{
   int *result{ new int };

   result = do_something();
   delete result;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

Max*_*kin 5

为了记录对象所有权的转移并防止内存泄漏,您应该使用来返回在堆上分配的对象unique_ptr。这是C ++最佳实践。

有关更多详细信息,请参见C ++核心准则:切勿通过原始指针(T *)或引用(T&)转让所有权

原因

如果不确定调用者或被调用者是否拥有某个对象,将发生泄漏或过早破坏。

  • @Tzalumen以我的经验,在99%的情况下,`shared_ptr`用来避免所有权的思考,从而导致次优设计和循环引用。因此,如果可能的话,我建议坚持使用“ unique_ptr”。 (2认同)