删除C ++指针

时间:2017-11-30 19:54:12

标签: c++ pointers

我的理解是在

的情况下
Ptr* p = new Ptr();

应该 delete p; p = 0。对我来说不清楚的是:

Ptr* p = obj.GetPtr()

我读到不应该 delete p,因为这可能是lead to adverse effects。如果函数GetPtr()本身new有一些指针但不delete它们怎么办?

1 个答案:

答案 0 :(得分:10)

在Modern C ++中,惯例是原始指针非拥有指针 - 因此您编写的代码和遵循现代约定的库不应该需要原始指针是delete d。

为了表示堆分配对象的所有权,使用智能指针代替std::unique_ptrstd::shared_ptr。在适当的时候,这些指针会自动为您调用{<1}}。

相关核心准则: "Never transfer ownership by a raw pointer (T*) or reference (T&)"

在您的特定情况下:

  

我不清楚在以下情况下该怎么做:

delete
  1. 假设Ptr* p = obj.GetPtr() 非拥有,因为它是原始指针

  2. 如果您使用旧版库,请查看p的文档。如果需要obj.GetPtr() d,文档应该提及它。