我一直在使用 pimpl 成语制作一些对象,但我不确定是否使用std::shared_ptr
or std::unique_ptr
。
我知道这样std::unique_ptr
效率更高,但这对我来说不是什么大问题,因为这些对象无论如何都比较重,所以std::shared_ptr
over的成本std::unique_ptr
相对较小。
我目前std::shared_ptr
只是因为额外的灵活性而去。例如,使用 astd::shared_ptr
允许我将这些对象存储在 hashmap 中以便快速访问,同时仍然能够将这些对象的副本返回给调用者(因为我相信任何迭代器或引用都可能很快变得无效)。
但是,这些对象实际上并没有被复制,因为更改会影响所有副本,所以我想知道也许使用std::shared_ptr
和允许副本是某种反模式或坏事。
它是否正确?