QWeakPointer 类

模板 <typename T> class QWeakPointer

QWeakPointer 类持有一个共享指针的弱引用。更多...

头文件 #include <QWeakPointer>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

注意:此类中的所有函数都是可重入的

公共函数

QWeakPointer()
QWeakPointer(const QSharedPointer<T> &other)
QWeakPointer(const QWeakPointer<T> &other)
~QWeakPointer()
voidclear()
boolisNull() const
QSharedPointer<T>lock() const
(自 6.7) boolowner_before(const QWeakPointer<X> &other) const
(自 6.7) boolowner_before(const QSharedPointer<X> &other) const
(自 6.7) boolowner_equal(const QWeakPointer<X> &other) const
(自 6.7) boolowner_equal(const QSharedPointer<X> &other) const
(自 6.7) size_towner_hash() const
voidswap(QWeakPointer<T> &other)
QSharedPointer<T>toStrongRef() const
booloperator bool() const
booloperator!() const
QWeakPointer<T> &operator=(const QWeakPointer<T> &other)
QWeakPointer<T> &operator=(const QSharedPointer<T> &other)
QWeakPointer<X>qWeakPointerCast(const QWeakPointer<T> &src)
booloperator!=(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
booloperator!=(const QWeakPointer<T> &lhs, std::nullptr_t)
booloperator!=(std::nullptr_t, const QWeakPointer<T> &rhs)
booloperator!=(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
booloperator==(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
booloperator==(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
booloperator==(const QWeakPointer& lhs, std::nullptr_t)
booloperator==(std::nullptr_t, const QWeakPointer& rhs)

详细描述

QWeakPointer是C++中对指针的自动弱引用。它不能直接用来解引用指针,但可以用来验证指针是否在其他上下文中被删除。

QWeakPointer对象只能通过从QSharedPointer赋值来创建。

需要注意的是,QWeakPointer不提供自动转换运算符以防止错误发生。即使QWeakPointer跟踪一个指针,它也不能被视为一个指针自己,因为它不能保证被指向的对象仍然有效。

因此,要访问QWeakPointer跟踪的指针,您必须首先将其提升为QSharedPointer并验证结果对象是否为null。QSharedPointer保证对象没有被删除,因此如果您获得一个非空对象,您可以使用指针。有关示例,请参阅QWeakPointer::toStrongRef()。

另请参阅QSharedPointerQScopedPointer

成员函数文档

[noexcept, 自6.7以来] 模板 <typename X> bool QWeakPointer::owner_before(const QSharedPointer<X> & other) const

[noexcept, 自6.7以来] 模板 <typename X> bool QWeakPointer::owner_before(const QWeakPointer<X> & other) const

如果且仅当此智能指针在实现定义的基于所有者的顺序中先于other返回true。这种顺序是,如果两个智能指针都是空的或它们都拥有相同的对象(即使它们的类型和指针不同),则认为它们是等效的。

此函数是Qt 6.7中引入的。

另请参阅owner_equal

[noexcept, 自6.7以来] 模板 <typename X> bool QWeakPointer::owner_equal(const QSharedPointer<X> & other) const

[noexcept, 自6.7以来] 模板 <typename X> bool QWeakPointer::owner_equal(const QWeakPointer<X> & other) const

如果且仅当此智能指针和other共享所有者时返回true

此函数是Qt 6.7中引入的。

另请参阅owner_beforeowner_hash

[noexcept, 自6.7以来] size_t QWeakPointer::owner_hash() const

为此智能指针对象返回基于所有者的哈希值。比较相等的智能指针(根据owner_equal)将具有相同的基于所有者的哈希值。

此函数是Qt 6.7中引入的。

另请参阅owner_equal

QWeakPointer::QWeakPointer()

创建一个指向空值的QWeakPointer。

QWeakPointer::QWeakPointer(const QSharedPointer<T> & other)

创建一个QWeakPointer,该指针保留了Other中引用的指针的弱引用。

如果T是此类模板参数的派生类型,则QWeakPointer将执行自动转换。否则,您将收到编译器错误。

[noexcept] QWeakPointer::QWeakPointer(const QWeakPointer<T> &other)

创建一个QWeakPointer,该指针保留了Other中引用的指针的弱引用。

如果T是此类模板参数的派生类型,则QWeakPointer将执行自动转换。否则,您将收到编译器错误。

QWeakPointer::~QWeakPointer()

销毁此QWeakPointer对象。由该对象引用的指针不会被删除。

void QWeakPointer::clear()

清除此QWeakPointer对象,释放其对指针可能拥有的引用。

bool QWeakPointer::isNull() const

如果此对象引用nullptr,则返回true。

请注意,由于弱引用的性质,QWeakPointer引用的指针可以在任何时候变为nullptr,因此此函数从一次调用到下一次调用的返回值可以从false变为true。

QSharedPointer<T> QWeakPointer::lock() const

toStrongRef相同。

此函数提供与std::weak_ptr的API兼容性。

[noexcept] void QWeakPointer::swap(QWeakPointer<T> &other)

交换此弱指针实例与其他(other)。此函数非常快,永远不会失败。

QSharedPointer<T> QWeakPointer::toStrongRef() const

将此弱引用提升为强引用并返回一个包含该引用的QSharedPointer对象。当提升到QSharedPointer时,此函数将验证该对象是否已被删除。如果没有,则此函数增加共享对象的引用计数,从而确保其不会删除。

由于此函数可能无法获得共享对象的有效强引用,因此您应始终通过在返回的对象上调用QSharedPointer::isNull()来验证转换是否成功。

例如,以下代码提升了一个持有的QWeakPointer到强引用,并在成功的情况下打印出所持有的整数的值

    QWeakPointer<int> weakref;

    // ...

    QSharedPointer<int> strong = weakref.toStrongRef();
    if (strong)
        qDebug() << "The value is:" << *strong;
    else
        qDebug() << "The value has already been deleted";

另请参阅QSharedPointer::QSharedPointer

bool QWeakPointer::operator bool() const

如果在其中包含的指针不是nullptr,则返回true。此函数适用于用于if-constructs,如下所示

    if (weakref) { ... }

请注意,由于弱引用的性质,QWeakPointer引用的指针可以在任何时候变为nullptr,因此此函数从一次调用到下一次的返回值可以从true变为false。

另请参阅isNull

bool QWeakPointer::operator!() const

如果此对象指向 nullptr 则返回 true。此函数适用于在 if-constructs 中使用,例如

    if (!weakref) { ... }

请注意,由于弱引用的性质,QWeakPointer引用的指针可以在任何时候变为nullptr,因此此函数从一次调用到下一次调用的返回值可以从false变为true。

另请参阅isNull

[noexcept] QWeakPointer<T> &QWeakPointer::operator=(const QWeakPointer<T> &other)

使此对象共享 other 的指针。当前的指针引用将被丢弃,但不会被删除。

如果 T 是此类模板参数的派生类型,QWeakPointer 将执行自动转换。否则,您将得到编译器错误。

QWeakPointer<T> &QWeakPointer::operator=(const QSharedPointer<T> &other)

使此对象共享 other 的指针。当前的指针引用将被丢弃,但不会被删除。

如果 T 是此类模板参数的派生类型,QWeakPointer 将执行自动转换。否则,您将得到编译器错误。

相关非成员函数

template <typename X, typename T> QWeakPointer<X> qWeakPointerCast(const QWeakPointer<T> &src)

返回指向由 src 持有的指针的弱指针,转换为目标类型 X。类型 TX 必须属于同一继承层次,以便能成功执行 static_cast

请注意,X 必须具有与 T 相同的 cv-限定符(constvolatile),否则代码将无法通过编译。请使用 qSharedPointerConstCast 来取消 const 限定符。

template <typename T, typename X> bool operator!=(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)

如果 ptr1ptr2 指向不同的指针,则返回 true

如果 ptr2 的模板参数与 ptr1 的不同,QSharedPointer 将尝试执行自动 static_cast 以确保比较的指针是相等的。如果 ptr2 的模板参数既不是 ptr1 的基类也不是其派生类,您将得到编译器错误。

template <typename T> bool operator!=(const QWeakPointer<T> &lhs, std::nullptr_t)

如果 lhs 指向有效(即非空)指针,则返回 true

另请参阅:QWeakPointer::isNull

template <typename T> bool operator!=(std::nullptr_t, const QWeakPointer<T> &rhs)

如果 rhs 指向有效(即非空)指针,则返回 true

另请参阅:QWeakPointer::isNull

模板 <typename T, typename X> bool operator!=(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)

如果 ptr1ptr2 指向不同的指针,则返回 true

如果 ptr2 的模板参数与 ptr1 的不同,QSharedPointer 将尝试执行自动 static_cast 以确保比较的指针是相等的。如果 ptr2 的模板参数既不是 ptr1 的基类也不是其派生类,您将得到编译器错误。

模板 <typename T, typename X> bool operator==(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)

如果 ptr1ptr2 指向同一指针,则返回 true

如果 ptr2 的模板参数与 ptr1 的不同,QSharedPointer 将尝试执行自动 static_cast 以确保比较的指针是相等的。如果 ptr2 的模板参数既不是 ptr1 的基类也不是其派生类,您将得到编译器错误。

模板 <typename T, typename X> bool operator==(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)

如果 ptr1ptr2 指向同一指针,则返回 true

如果 ptr2 的模板参数与 ptr1 的不同,QSharedPointer 将尝试执行自动 static_cast 以确保比较的指针是相等的。如果 ptr2 的模板参数既不是 ptr1 的基类也不是其派生类,您将得到编译器错误。

模板 <typename T> bool operator==(const QWeakPointer<T> &lhs, std::nullptr_t)

如果 lhs 指向 nullptr,则返回 true

另请参阅:QWeakPointer::isNull

模板 <typename T> bool operator==(std::nullptr_t, const QWeakPointer<T> &rhs)

如果 rhs 指向 nullptr,则返回 true

另请参阅:QWeakPointer::isNull

© 2024 Qt 公司。本文档中包含的贡献版权属于各自的所有者。本提供的文档受 GNU 自由文档许可证版本 1.3 的条款约束,由自由软件基金会发布。Qt 及其相应标志是芬兰的 Qt 公司和/或其他国家的商标。所有其他商标均属各自所有者的财产。