从函数返回指针

时间:2013-10-23 08:51:24

标签: c++ smart-pointers

我最近意外地调用了一个RemoveItem函数,它返回了一个我应该拥有(但没有)的指针,而不是调用返回void的DeleteItem方法。

为了避免这种泄漏,从预期调用者获得返回对象所有权的函数返回的正确指针是什么?

Base * factory()
{
   if (condition)
     return new DerivedA;
   else
     return new DerivedB;
 }

 ...

 boost::scoped_ptr<Base> b(factory());  // no leak here
 factory();  // but this leaks, obviously

factory()应该返回共享指针以防止泄漏吗?


工厂的例子应该很熟悉,但这就是导致我出现问题的事情: -

void DeleteItem(ItemName);  // delete named item from structure.

Item* RemoveItem(ItemName); // removes named item from the structure, and returns it.       
                           //Caller can then re-insert it elsewhere. 

RemoveItem("Fred"); // whoops! Should have called DeleteItem.
                    // Apart from the leak, everything appears OK...

1 个答案:

答案 0 :(得分:1)

显而易见的解决方案是只有一个函数返回 和std::auto_ptr(因为你说你没有C ++ 11)。这个 除非调用者这样做,否则将导致删除该对象 用它的东西。