原始指针管理

Raw pointer management

本文关键字:管理 指针 原始      更新时间:2023-10-16

是否适合一个类在"创建"方法中返回一个原始指针,并在其"销毁"方法中接受一个原始指针参数?上述类将指针存储在容器中,并通过destroy方法查找/删除指定对象。

或者我应该使用智能指针?如果我理解正确的话,智能指针表示所有权,但是类单独负责对象的创建和销毁。

问题是:您能以编程方式描述代码应该具有的获取/释放行为吗?如果是,即行为不是一系列没有任何模式的唯一事件,那么你可以编写一个实现此行为的句柄类。更重要的是,这个句柄类将能够保证行为,这就是智能指针的全部内容。这不仅仅是关于代码的正确性,而是关于扩展保证,使编写正确的代码更容易。

此外,智能指针并不总是表明所有权,尽管它们在大多数情况下都是这样。共享所有权(shared_ptr)和独占所有权(auto_ptr, unique_ptr)之间也有区别。然后,有一个没有所有权的引用(weak_ptr)。

对我来说,这听起来像是你可能想要返回一个shared_ptr和一个相应的delete。然后,工厂可以保留weak_ptr来保留对相应对象的一些访问,而shared_ptr则保证正确的清理。不过,请确保定期从工厂内部清除过期的weak_ptrs。

在任何情况下我都不会返回一个原始指针。问题是:调用者完成后应该如何处理它?调用删除?调用一些特定的destroy()函数?这两种情况都可以由智能指针来处理。此外,如果工厂保留所有权并保留自己随时丢弃对象的权利,那么持有原始指针的人如何告知该指针将失效的事实?一个简单的答案是使用一个智能指针,它会收到通知,比如weak_ptr.