我正在使用pimpl方法创建一些对象,但我不确定是否应该使用std::shared_ptr
还是std::unique_ptr
。
我知道std::unique_ptr
更高效,但对我来说这并不是很重要,因为这些对象本身就比较庞大,所以std::shared_ptr
相对于std::unique_ptr
的成本相对较小。
我目前选择使用std::shared_ptr
只是因为它更加灵活。例如,使用std::shared_ptr
允许我将这些对象存储在哈希表中以便快速访问,同时仍然能够将这些对象的副本返回给调用者(因为我认为任何迭代器或引用可能会很快失效)。
然而,这些对象在某种程度上并没有被复制,因为更改会影响所有副本,因此我想知道,也许使用std::shared_ptr
并允许复制是某种反模式或不好的事情。
这样正确吗?
unique_ptr
,但是共享实现的对象也有它们的用处,特别是如果你正在编写“外部”代码(例如COM、C++/CLI),或者如果这个类真的看起来像是一个“引用类型”。 - Alexandre C.