何时接收unique_ptr

时间:2016-01-23 11:26:00

标签: c++ smart-pointers

我对C ++比较陌生,想要采用现代实践。我一直试图了解sink unique_ptr的最佳时间,以下是我的一些代码:

class SomeClass
{
    ...

private:
    unique_ptr<QStaticText> _text;
}


{
    ...

    void SomeClass::setText(unique_ptr<QStaticText> newText)
    {
        _text = move(newText);
    }

    void SomeClass::setText(const QStaticText& newText)
    {
        _text = make_unique<QStaticText>(newText);
    }

    ...
}

我是否应该选择其中一种,无论是另一种?

1 个答案:

答案 0 :(得分:0)

参考QStaticText的界面,我们不清楚你为什么要使用指针(智能或其他)。 (我相信panta rei也在评论中注明了这一点。)看看Why Should I Use a Pointer Rather Than the Object Itself

在这种情况下,最好有这样的东西:

class SomeClass
{
    ...

private:
    QStaticText _text;
};


template<class Text>
void SomeClass::setText(const Text &newText)
{
    _text = QStaticText(newText);
}

请注意以下事项:

  1. QStaticText仅针对不经常更改进行了优化。

  2. 它可以通过至少两种不同的类型构建。

  3. 很难看出你目前的计划获得了什么。对于每次更新,您无论如何都要创建多个对象,并且您无法重复使用它们(您将内容移出它们)。