从工厂返回指针

时间:2012-10-25 05:26:14

标签: c++ c++11 factory smart-pointers

从工厂返回指针的最佳方法是什么?它应该是std::unique_ptr还是std::shared_ptr还是只是一个原始指针?

另外,有人告诉我,如果存在遏制,则应该std::unique_ptr;如果存在聚合,则应该std::shared_ptr。这是正确的方法吗?

2 个答案:

答案 0 :(得分:5)

您应该仅在非常特殊的情况下考虑原始指针,例如将指针传递到DLL边界。

shared_ptrunique_ptr之间,我的意见是更喜欢后者。这使界面对用户更灵活。如果他们愿意,他们总是可以将返回的unique_ptr转换为shared_ptr,但更重要的是,他们也可以调用unique_ptr::release然后手动管理指针(可能不是一个好主意,但是它使选项保持打开状态。

如果您的工厂需要为返回的unique_ptr分配自定义删除器,那么您应该注意的unique_ptrshared_ptr之间的行为差​​异是前者不会调用如果托管指针是nullptr,则删除,但后者将。因此,如果您的工厂可能返回nullptr(可能是失败条件),并且有人将unique_ptr转换为shared_ptr,那么请确保删除器可以处理{{1作为它的论点。

答案 1 :(得分:0)

你当然不应该返回一个原始指针。我认为std :: unique_ptr和std :: shared_ptr在大多数情况下都同样好。但当然标准的智能指针类并不是唯一的。例如,有些类实现了侵入式引用计数,人们实现了一个特殊的智能指针类来处理它们,通常称为RefPtr。还有COM接口,有CComPtr。

相关问题