我的理解是在
的情况下Ptr* p = new Ptr();
我应该 delete p; p = 0
。对我来说不清楚的是:
Ptr* p = obj.GetPtr()
我读到不应该 delete p
,因为这可能是lead to adverse effects。如果函数GetPtr()
本身new
有一些指针但不delete
它们怎么办?
答案 0 :(得分:10)
在Modern C ++中,惯例是原始指针是非拥有指针 - 因此您编写的代码和遵循现代约定的库不应该需要原始指针是delete
d。
为了表示堆分配对象的所有权,使用智能指针代替(std::unique_ptr
和std::shared_ptr
)。在适当的时候,这些指针会自动为您调用{<1}}。
相关核心准则: "Never transfer ownership by a raw pointer (T*) or reference (T&)"
在您的特定情况下:
我不清楚在以下情况下该怎么做:
delete
假设Ptr* p = obj.GetPtr()
非拥有,因为它是原始指针。
如果您使用旧版库,请查看p
的文档。如果需要obj.GetPtr()
d,文档应该提及它。