原始指针管理

时间:2013-05-01 02:00:46

标签: c++ pointers

类是否适合在“create”方法中返回原始指针并在其“destroy”方法中获取原始指针参数?上述类将指针存储在容器中,并通过destroy方法查找/删除指定的对象。

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

1 个答案:

答案 0 :(得分:1)

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

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

对我而言,听起来您可能想要使用相应的删除器返回shared_ptr。然后工厂可以例如保持weak_ptr以保留对相应对象的一些访问权限,而shared_ptr保证正确清理。确保你经常从工厂内部清除过期的weak_ptrs。

在任何情况下,我都不会返回原始指针。这个问题是:调用者在完成后应该怎么做?呼叫删除?调用一些特定的destroy()函数?这两个都可以通过智能指针更好地处理。此外,如果工厂保留所有权并保留自己随时丢弃对象的权利,那么持有原始指针的人如何知道该指针将变为无效?一个简单的答案是使用一个获得通知的智能指针,例如了weak_ptr。