2

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

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

4

1 回答 1

1

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

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

对我来说,听起来您可能想返回一个带有相应删除器的 shared_ptr 。然后工厂可以例如保留一个weak_ptr 以保留对相应对象的一些访问,而shared_ptr 保证正确的清理。不过,请确保您定期从工厂内部清除过期的 weak_ptrs。

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

于 2013-05-01T06:16:39.720 回答