来自原始指针的 QSharedPointer

QSharedPointer from a raw pointer

本文关键字:QSharedPointer 指针 原始      更新时间:2023-10-16

我目前有这样的东西:

QSharedPointer<t> Qsharedfoo;

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

我想做这样的事情:

Qsharedfoo = rawfoo

直接从Qt文档中,我们有这样的东西:

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);

如何使 foo point 拥有原始指针并开始指向它。我知道在带有共享指针的 boost 中,我们可以使用 boost::make_shared 我们如何用 QSharedPointer 做到这一点?

不幸的是,你不能。

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

  • 它不一定是异常安全的。

总之,您需要通过构造函数和运算符=,如下所示:

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

或者,如果您已经引用了指针,则使用 reset() 方法,如下所示:

Qsharedfoo.reset(rawFoo);

但正如开头提到的,这些操作与您正在寻找的操作不相等。