如果释放auto_ptr所拥有的对象但实际上没有将它分配给原始指针,那么指针会发生什么?似乎它应该被删除,但它永远不会有机会。它是否会被“泄漏到野外”?
void usingPointer(int* p);
std::auto_ptr<int> point(new int);
*point = 3;
usingPointer(point.release());
注意:我不再使用auto_ptr了,我现在使用tr1 :: shared_ptr。这种情况让我很好奇。
答案 0 :(得分:3)
除非usingPointer
在delete
上调用p
,否则这是内存泄漏。如果您拨打get
而不是release
,那么当point
超出范围时,内存将自动删除。
答案 1 :(得分:2)
release
不会从文档中删除所拥有的点:
将auto_ptr内部指针设置为空指针(表示它指向无对象)而不破坏 auto_ptr当前指向的对象。
此外,将auto_ptr
的所有用途替换为tr1::shared_ptr
是一种过度杀伤 - 您应该使用unique_ptr
,而不需要共享{。}}。