5

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对象的更改。但是有没有严格的方法我必须怎么做?

4

1 回答 1

-1

我会按值传递它。

您说在第二个选项中(如果您通过引用返回),您将“避免”引用计数器的增量。你是对的,这意味着当对象超出范围时(例如在另一个线程中),你冒着删除对象的风险。

而且……那将是我唯一的(好的)理由。有人可能会争辩说,按价值传递的成本更高,但我会让他们记住想要速度吗?按值传递。

另请注意,这里有一个关于如何使用智能指针的非常好的答案。

于 2017-09-08T13:50:59.457 回答