【发布时间】:2014-07-24 13:22:55
【问题描述】:
我有一个作用域保护对象工厂,它返回一个 shared_ptr 给我想在作用域期间保留的保护。
工厂的Create方法声明为:
virtual boost::shared_ptr<GenericGuard> Create() const = 0;
我的问题是——写起来更好吗:
boost::shared_ptr<SelectorGenericGuard> guard = factory->Create();
或:
const boost::shared_ptr<SelectorGenericGuard>& guard = factory->Create();
第一个版本可以/可能/将创建shared_ptr 的副本,因此可以/可能/将导致额外的引用计数器增量 - 第二个版本显然可读性较差,我无法确定我的“默认”应该是 - 所有被认为可读性的东西通常是我最喜欢的,我想听听其他人的想法。
或者我应该在这里使用auto_ptr(将来是unique_ptr)并免费使用第一个更易读的表格吗? (这里唯一的缺点是使用auto_ptr ;))
【问题讨论】:
-
在复制初始化期间,没有任何理智的实现会真正执行复制。两者在性能上是相当的。当然,后者会阻止您修改值,尤其是您将无法重置指针以提前解除警卫。
标签: c++ boost shared-ptr factory