[英]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_ptr
和std::shared_ptr
) 。 这些指针会在适当时自动为您调用delete
。
相关核心准则: “永远不要通过原始指针(T *)或参考(T&)转移所有权” 。
在您的特定情况下:
我不清楚的是在以下情况下该怎么做:
Ptr* p = obj.GetPtr()
假设p
是非拥有的 ,因为它是一个原始指针 。
如果您使用的是旧版库,请查看obj.GetPtr()
的文档。 如果需要delete
d,文档应该提及它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.