C++ QSharedPointer作为方法参数或方法返回值的良好实践?

C++ QSharedPointer作为方法参数或方法返回值的良好实践?,c++,qt,qsharedpointer,C++,Qt,Qsharedpointer,关于如何使用QSharedPointer对象作为方法参数或方法返回值,是否有良好的实践或规定 按价值计算: LMNode::setParent(QSharedPointer<LMNode> parent) { this->parent = parent; } QSharedPointer<LMNode> LMNode::getParent() { return this->parent; } LMNode::setParent(QShare

关于如何使用
QSharedPointer
对象作为方法参数或方法返回值,是否有良好的实践或规定

按价值计算:

LMNode::setParent(QSharedPointer<LMNode> parent)
{
    this->parent = parent;
}

QSharedPointer<LMNode> LMNode::getParent()
{
    return this->parent;
}
LMNode::setParent(QSharedPointer父级)
{
这->父=父;
}
QSharedPointer LMNode::getParent()
{
返回此->父项;
}
或更好的参考:

LMNode::setParent(const QSharedPointer<LMNode>& parent)
{
    this->parent = parent;
}

const QSharedPointer<LMNode>& LMNode::getParent()
{
    return this->parent;
}
LMNode::setParent(常量QSharedPointer&parent)
{
这->父=父;
}
常量QSharedPointer&LMNode::getParent()
{
返回此->父项;
}

当然,在第二个版本中,我避免了引用计数器的增量和
QSharedPointer
对象的更改。但是有没有一个严格的方法可以让我这么做呢?

我会按值传递它

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

而且。。。那将是我唯一(好)的理由。有人可能会说传递值的代价更高,但我会让他们记住


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

谢谢您的评论。帮助做决定。关于通过值传递的成本,
QSharedPointer
对象的大小与两个普通指针相同,因此通过引用传递将节省4或8个字节(取决于系统架构)。不知道,这是什么问题。有趣的文章。