auto_ptr在未分配其返回值的情况下发布

时间:2010-01-16 08:50:43

标签: c++ pointers

如果释放auto_ptr所拥有的对象但实际上没有将它分配给原始指针,那么指针会发生什么?似乎它应该被删除,但它永远不会有机会。它是否会被“泄漏到野外”?

void usingPointer(int* p); 

std::auto_ptr<int> point(new int);
*point = 3;

usingPointer(point.release());

注意:我不再使用auto_ptr了,我现在使用tr1 :: shared_ptr。这种情况让我很好奇。

2 个答案:

答案 0 :(得分:3)

除非usingPointerdelete上调用p,否则这是内存泄漏。如果您拨打get而不是release,那么当point超出范围时,内存将自动删除。

答案 1 :(得分:2)

release不会从文档中删除所拥有的点:

  

将auto_ptr内部指针设置为空指针(表示它指向无对象)而不破坏 auto_ptr当前指向的对象。

此外,将auto_ptr的所有用途替换为tr1::shared_ptr是一种过度杀伤 - 您应该使用unique_ptr,而不需要共享{。}}。