QWeakPointer 类
模板 <typename T> class QWeakPointerQWeakPointer 类持有一个共享指针的弱引用。更多...
头文件 | #include <QWeakPointer> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
注意:此类中的所有函数都是可重入的。
公共函数
QWeakPointer() | |
QWeakPointer(const QSharedPointer<T> &other) | |
QWeakPointer(const QWeakPointer<T> &other) | |
~QWeakPointer() | |
void | clear() |
bool | isNull() const |
QSharedPointer<T> | lock() const |
(自 6.7) bool | owner_before(const QWeakPointer<X> &other) const |
(自 6.7) bool | owner_before(const QSharedPointer<X> &other) const |
(自 6.7) bool | owner_equal(const QWeakPointer<X> &other) const |
(自 6.7) bool | owner_equal(const QSharedPointer<X> &other) const |
(自 6.7) size_t | owner_hash() const |
void | swap(QWeakPointer<T> &other) |
QSharedPointer<T> | toStrongRef() const |
bool | operator bool() const |
bool | operator!() const |
QWeakPointer<T> & | operator=(const QWeakPointer<T> &other) |
QWeakPointer<T> & | operator=(const QSharedPointer<T> &other) |
相关非成员
QWeakPointer<X> | qWeakPointerCast(const QWeakPointer<T> &src) |
bool | operator!=(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2) |
bool | operator!=(const QWeakPointer<T> &lhs, std::nullptr_t) |
bool | operator!=(std::nullptr_t, const QWeakPointer<T> &rhs) |
bool | operator!=(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2) |
bool | operator==(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2) |
bool | operator==(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2) |
bool | operator==(const QWeakPointer |
bool | operator==(std::nullptr_t, const QWeakPointer |
详细描述
QWeakPointer是C++中对指针的自动弱引用。它不能直接用来解引用指针,但可以用来验证指针是否在其他上下文中被删除。
QWeakPointer对象只能通过从QSharedPointer赋值来创建。
需要注意的是,QWeakPointer不提供自动转换运算符以防止错误发生。即使QWeakPointer跟踪一个指针,它也不能被视为一个指针自己,因为它不能保证被指向的对象仍然有效。
因此,要访问QWeakPointer跟踪的指针,您必须首先将其提升为QSharedPointer并验证结果对象是否为null。QSharedPointer保证对象没有被删除,因此如果您获得一个非空对象,您可以使用指针。有关示例,请参阅QWeakPointer::toStrongRef()。
另请参阅QSharedPointer和QScopedPointer。
成员函数文档
[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_before和owner_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
。类型 T
和 X
必须属于同一继承层次,以便能成功执行 static_cast
。
请注意,X
必须具有与 T
相同的 cv-限定符(const
和 volatile
),否则代码将无法通过编译。请使用 qSharedPointerConstCast 来取消 const
限定符。
template <typename T, typename X> bool operator!=(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
如果 ptr1 和 ptr2 指向不同的指针,则返回 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)
如果 ptr1 和 ptr2 指向不同的指针,则返回 true
。
如果 ptr2 的模板参数与 ptr1 的不同,QSharedPointer 将尝试执行自动 static_cast
以确保比较的指针是相等的。如果 ptr2 的模板参数既不是 ptr1 的基类也不是其派生类,您将得到编译器错误。
模板 <typename T, typename X> bool operator==(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
如果 ptr1 和 ptr2 指向同一指针,则返回 true
。
如果 ptr2 的模板参数与 ptr1 的不同,QSharedPointer 将尝试执行自动 static_cast
以确保比较的指针是相等的。如果 ptr2 的模板参数既不是 ptr1 的基类也不是其派生类,您将得到编译器错误。
模板 <typename T, typename X> bool operator==(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
如果 ptr1 和 ptr2 指向同一指针,则返回 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 公司和/或其他国家的商标。所有其他商标均属各自所有者的财产。