【问题标题】:Good practice for QSharedPointer as method parameter or return value of a method?QSharedPointer 作为方法参数或方法返回值的良好做法?
【发布时间】:2017-09-07 16:07:43
【问题描述】:

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

【问题讨论】:

    标签: c++ qt qsharedpointer


    【解决方案1】:

    我会按价值传递它。

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

    而且...这将是我唯一的(好的)理由。有人可能会争辩说按价值传递的成本更高,但我会让他们记住Want speed? Pass by value.

    另请注意,关于如何使用智能指针here,有一个很好的答案。

    【讨论】:

    • 感谢您的评论。有助于做出决定。关于按值传递的成本,QSharedPointer 对象有两个普通指针的大小,因此按引用传递将节省 4 或 8 个字节(取决于系统架构)。不知道,这可能是一个问题。有趣的文章。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2016-04-29
    • 2012-03-20
    相关资源
    最近更新 更多