繁体   English   中英

删除C ++指针

[英]Deleting C++ pointers

这是我的理解,在这种情况下

Ptr* p = new Ptr();

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

Ptr* p = obj.GetPtr()

我读到我不应该 delete p因为这可能会导致不利影响 如果函数GetPtr()本身是new的一些指针但不delete它们怎么办?

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

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

相关核心准则: “永远不要通过原始指针(T *)或参考(T&)转移所有权”


在您的特定情况下:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM