【发布时间】:2015-12-03 09:40:12
【问题描述】:
我已经实现了责任链设计模式,链中的每个元素都是shared_ptr。在这种情况下,我想让first 作为链的开始,last 和链的结束,以便能够使用last 添加新的链 itms。在link 下面的函数中是当前链元素创建为局部变量,我使用下面的函数添加到链中:
void addLink(std::shared_ptr<ILink>& first, std::shared_ptr<ILink>& last, std::shared_ptr<ILink>& link)
{
if (first == nullptr)
{
first = link;
last = first;
}
else
{
last->setSuccessor(link);
last = link;
}
}
使用所有引用是否是一种好习惯,它会增加引用计数吗?
编辑:
这个方法是这样调用的:
std::shared_ptr<T> first;
std::shared_ptr<T> last = first;
const std::shared_ptr<T> link = std::make_shared<T>(some_arguments_here);
所以引用是对对象的引用,它们仍然可能会增加使用次数。
【问题讨论】:
-
有效吗?有哪些替代方案?
-
您不会复制
std::shared_ptr,因此无法增加自身的引用计数。因此,我认为这并不是特别好的做法。您通过值传递shared_ptr以保证指向对象的有效性。这就是重点。
标签: c++ c++11 shared-ptr