【问题标题】:QSharedPointer from a raw pointer来自原始指针的 QSharedPointer
【发布时间】:2014-01-10 23:29:15
【问题描述】:

我目前有这样的事情:

QSharedPointer<t> Qsharedfoo;

现在我有一个指向 foo 的原始指针,也称为 rawfoo。如何让 foo 点拥有原始指针并开始指向它。我知道通过共享指针提升我们可以使用boost::make_shared 我们如何使用QSharedPointer 来做到这一点?

我想做这样的事情:

Qsharedfoo = rawfoo

【问题讨论】:

    标签: c++ qt boost qtcore qsharedpointer


    【解决方案1】:

    直接来自Qt documentation,我们有这样的东西:

    QSharedPointer<MyObject> obj = QSharedPointer<MyObject>(new MyObject);
    

    你基本上可以用同样的方式传递你的指针:

    // Here I assume that T is the class you're using for Qsharedfoo.
    QSharedPointer<T> Qsharedfoo = QSharedPointer<T>(rawfoo);
    

    【讨论】:

      【解决方案2】:

      如何让 foo 点拥有原始指针并开始指向它。我知道在使用共享指针的 boost 中我们可以使用 boost::make_shared 我们如何使用 QSharedPointer 呢?

      很遗憾,你不能。

      • 与 make_shared 不同,您将始终需要通过构造函数。

      • 不一定是异常安全的。

      总而言之,您需要通过构造函数和operator= 如下:

      Qsharedfoo = QSharedPointer<T>(rawfoo); // operator=() overload
      

      或者如果你已经有一个指针的引用,那么使用reset() method如下:

      Qsharedfoo.reset(rawFoo);
      

      但如开头所述,这些操作与您要查找的操作不同。

      【讨论】:

      • 很像旧的 std::auto_ptr,我也更喜欢使用 reset() 来避免你提到的轻微开销。但看来我可能误解了 MistyD 真正想要回答的问题。
      猜你喜欢
      • 2017-06-09
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 2021-11-15
      相关资源
      最近更新 更多