删除C++指针

Deleting C++ pointers

本文关键字:指针 C++ 删除      更新时间:2023-10-16

据我了解,在

Ptr* p = new Ptr();

应该delete p; p = 0.我不清楚的是,在以下情况下该怎么办:

Ptr* p = obj.GetPtr()

我读到我不应该delete p,因为这可能会导致不良影响。如果函数自身GetPtr()new一些指针,但没有delete它们怎么办?

在现代C++中,约定是原始指针非拥有指针 - 因此,您编写的代码和遵循现代约定的库不应要求原始指针deleted。

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

相关核心准则: "切勿通过原始指针 (T*) 或引用 (T&) 转让所有权"。


在您的特定情况下:

我不清楚的是,在

以下情况下该怎么办:

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

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