什么是更好的:删除指针或用新值设置?

use*_*898 2 c++ pointers

在c ++中的简单问题,说我有一个循环,我有函数返回指向项目的指针,
所以我必须定义内部循环指针,所以我的问题是如何处理循环内的指针,删除它?或者用新值设置它是好的
,例如:

for(int i =0;i<count();i++)
{

 ptrTmp* ptr = getItemPtr();
 // do somthing with the ptr ...
 // what to do here ? to delete the poinetr or not? 
 delete ptr;  // ??

}
Run Code Online (Sandbox Code Playgroud)

CB *_*ley 11

这完全取决于接口getItemPtr指定的内容.通常,返回原始指针的"get pointer"接口不会转移指向对象的所有权,因此删除它是错误的.在这种情况下,您可以安全地让指针变量超出范围.没有必要将其设置为NULL.

另一方面,getItemPtr可能会记录为返回指向必须删除的新对象的指针,在这种情况下,您需要删除它,但确保发生这种情况的更好方法是使用智能指针来确保发生这种情况.在您的示例中,初始化a std::auto_ptr将是最简单,最便携的方法.

std::auto_ptr<ptrTmp> ptr( getItemPtr() );
Run Code Online (Sandbox Code Playgroud)