关于如何使用QSharedPointer
对象作为方法参数或方法的返回值,是否有任何良好实践或规定?
按价值:
LMNode::setParent(QSharedPointer<LMNode> parent)
{
this->parent = parent;
}
QSharedPointer<LMNode> LMNode::getParent()
{
return this->parent;
}
或更好的参考:
LMNode::setParent(const QSharedPointer<LMNode>& parent)
{
this->parent = parent;
}
const QSharedPointer<LMNode>& LMNode::getParent()
{
return this->parent;
}
当然,在第二个版本中,我避免了引用计数器的增量和QSharedPointer
对象的更改。但是,我必须采取严格的方式吗?
答案 0 :(得分:-1)
我按价值传递。
你说在第二个选项中(如果你通过引用返回),你将“避免”引用计数器的增量。你是对的,这意味着当它超出范围时(例如在另一个线程中),你冒着删除对象的风险。
而且......那将是我唯一的(好)理由。有人可能会说,通过价值传递是更昂贵的,但我只是让他们记住Want speed? Pass by value.
另请注意,如何使用智能指针here有一个非常好的答案。