QSharedPointer Class
template <typename T> class QSharedPointerQSharedPointer 类持有一个共享指针的强引用。更多
头文件: | #include <QSharedPointer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
该类具有强可比性。
该类与 QSharedPointer<X>、X* 和 std::nullptr_t 具有强可比性。
其中 X 和 T 是兼容类型,这意味着它们要么相同,要么一个是另一个的基类型。
注意:该类中的所有函数都是可重入的。
公共函数
QSharedPointer() | |
QSharedPointer(QSharedPointer<X> &&other) | |
QSharedPointer(X *ptr) | |
QSharedPointer(const QWeakPointer<T> &other) | |
QSharedPointer(std::nullptr_t) | |
QSharedPointer(X *ptr, Deleter d) | |
QSharedPointer(std::nullptr_t, Deleter d) | |
QSharedPointer(const QSharedPointer<T> &other) | |
QSharedPointer(QSharedPointer<T> &&other) | |
~QSharedPointer() | |
void | clear() |
QSharedPointer<X> | constCast() const & |
(since 6.9) QSharedPointer<X> | constCast() && |
T * | data() const |
QSharedPointer<X> | dynamicCast() const & |
(since 6.9) QSharedPointer<X> | dynamicCast() && |
T * | get() const |
bool | isNull() const |
QSharedPointer<X> | objectCast() const & |
(since 6.9) QSharedPointer<X> | objectCast() && |
(since 6.7) bool | owner_before(const QSharedPointer<X> &other) const |
(since 6.7) bool | owner_before(const QWeakPointer<X> &other) const |
(since 6.7) bool | owner_equal(const QSharedPointer<X> &other) const |
(since 6.7) bool | owner_equal(const QWeakPointer<X> &other) const |
(since 6.7) size_t | owner_hash() const |
void | reset() |
void | reset(T *t) |
void | reset(T *t, Deleter deleter) |
QSharedPointer<X> | staticCast() const & |
(since 6.9) QSharedPointer<X> | staticCast() && |
void | swap(QSharedPointer<T> &other) |
QWeakPointer<T> | toWeakRef() const |
bool | operator bool() const |
bool | operator!() const |
T & | operator*() const |
T * | operator->() const |
QSharedPointer<T> & | operator=(QSharedPointer<T> &&other) |
QSharedPointer<T> & | operator=(QSharedPointer<X> &&other) |
QSharedPointer<T> & | operator=(const QSharedPointer<T> &other) |
QSharedPointer<T> & | operator=(const QWeakPointer<T> &other) |
静态公共成员
QSharedPointer<T> | create(Args &&... args) |
相关非成员
size_t | qHash(const QSharedPointer<T> &key, size_t seed = 0) |
QSharedPointer<X> | qSharedPointerCast(const QSharedPointer<T> &other) |
(since 6.9) QSharedPointer<X> | qSharedPointerCast(QSharedPointer<T> &&other) |
QSharedPointer<X> | qSharedPointerCast(const QWeakPointer<T> &other) |
QSharedPointer<X> | qSharedPointerConstCast(const QSharedPointer<T> &src) |
(since 6.9) QSharedPointer<X> | qSharedPointerConstCast(QSharedPointer<T> &&src) |
QSharedPointer<X> | qSharedPointerConstCast(const QWeakPointer<T> &src) |
QSharedPointer<X> | qSharedPointerDynamicCast(const QSharedPointer<T> &src) |
(since 6.9) QSharedPointer<X> | qSharedPointerDynamicCast(QSharedPointer<T> &&src) |
QSharedPointer<X> | qSharedPointerDynamicCast(const QWeakPointer<T> &src) |
QSharedPointer<X> | qSharedPointerObjectCast(const QSharedPointer<T> &src) |
(since 6.9) QSharedPointer<X> | qSharedPointerObjectCast(QSharedPointer<T> &&src) |
QSharedPointer<X> | qSharedPointerObjectCast(const QWeakPointer<T> &src) |
std::shared_ptr<X> | qSharedPointerObjectCast(const std::shared_ptr<T> &src) |
std::shared_ptr<X> | qSharedPointerObjectCast(std::shared_ptr<T> &&src) |
std::shared_ptr<X> | qobject_pointer_cast(const std::shared_ptr<T> &src) |
std::shared_ptr<X> | qobject_pointer_cast(std::shared_ptr<T> &&src) |
bool | operator!=(const QSharedPointer<T> &lhs, const QSharedPointer<X> &rhs) |
bool | operator!=(const QSharedPointer<T> &lhs, const X *rhs) |
bool | operator!=(const QSharedPointer<T> &lhs, std::nullptr_t) |
bool | operator!=(const T *lhs, const QSharedPointer<X> &rhs) |
bool | operator!=(std::nullptr_t, const QSharedPointer<T> &rhs) |
QDebug | operator<<(QDebug debug, const QSharedPointer<T> &ptr) |
bool | operator==(const QSharedPointer<T> &lhs, const QSharedPointer<X> &rhs) |
bool | operator==(const QSharedPointer<T> &lhs, const X *rhs) |
bool | operator==(const QSharedPointer<T> &lhs, std::nullptr_t) |
bool | operator==(const T *lhs, const QSharedPointer<X> &rhs) |
bool | operator==(std::nullptr_t, const QSharedPointer<T> &rhs) |
详细说明
QSharedPointer 是 C++ 中的自动共享指针。就正常目的而言,它的行为与普通指针完全相同,包括尊重常量。
如果没有其他 QSharedPointer 对象引用它,QSharedPointer 会在指针离开作用域时删除它所持有的指针。
QSharedPointer 对象可以通过普通指针、另一个 QSharedPointer 对象或将QWeakPointer 对象提升为强引用来创建。
线程安全
QSharedPointer 和QWeakPointer 都是可重入类。这意味着,一般情况下,如果不同步,多个线程不能同时访问给定的 QSharedPointer 或QWeakPointer 对象。
多个线程可以安全地同时访问不同的 QSharedPointer 和QWeakPointer 对象。这包括它们持有指向同一对象的指针的情况;引用计数机制是原子的,无需手动同步。
需要注意的是,虽然可以通过这种方式访问指针值(即多个线程同时访问,无需同步),但 QSharedPointer 和QWeakPointer 并不保证指向的对象。该对象的特定线程安全和重入规则仍然适用。
其他指针类
Qt XML 还提供了另外两个指针封装类:QPointer 和QSharedDataPointer 。这两个类互不兼容,因为各自的使用情况截然不同。
QSharedPointer 通过外部引用计数器(即放置在对象外部的引用计数器)来保存共享指针。正如其名称所示,指针值在所有 QSharedPointer 实例和QWeakPointer 之间共享。不过,指针指向的对象内容不应被视为共享内容:对象只有一个。因此,QSharedPointer 并不提供分离或复制指向对象的方法。
QSharedDataPointer另一方面,QSharedPointer 持有指向共享数据(即从QSharedData 派生的类)的指针。它是通过放置在QSharedData 基类中的内部引用计数来做到这一点的。因此,该类可以根据对被保护数据的访问类型进行分离:如果是非const 访问,它就会原子地创建一个副本以完成操作。
QExplicitlySharedDataPointer 是 的一个变体,但它只有在明确调用 () 时才会分离(因此得名)。QSharedDataPointer QExplicitlySharedDataPointer::detach
QScopedPointer 析构类只持有指向堆分配对象的指针,并在析构函数中将其删除。当一个对象需要进行堆分配和删除时,该类就派上用场了。 是轻量级的,它不使用额外的结构或引用计数。QScopedPointer
最后,QPointer 持有一个指向QObject 派生对象的指针,但其功能较弱。QWeakPointer 具有相同的功能,但该功能已被弃用。
可选的指针跟踪
QSharedPointer 的一个功能是指针跟踪机制,它可以在编译时启用,以便调试。启用后,QSharedPointer 会在一个全局集中注册它所跟踪的所有指针。这样就能发现错误,比如将同一个指针分配给两个 QSharedPointer 对象。
在包含 QSharedPointer 头文件之前,通过定义QT_SHAREDPOINTER_TRACK_POINTERS
宏可以启用该功能。
即使编译的代码没有该功能,使用该功能也是安全的。QSharedPointer 将确保从跟踪器中移除指针,即使是在没有指针跟踪功能的情况下编译的代码也是如此。
但请注意,指针跟踪功能在多重继承或虚拟继承(即两个不同的指针地址可以指向同一个对象)方面有限制。在这种情况下,如果指针被转换为不同的类型且其值发生变化,QSharedPointer 的指针跟踪机制可能无法检测到被跟踪的对象是否相同。
另请参见 QSharedDataPointer,QWeakPointer,QScopedPointer, 和QEnableSharedFromThis 。
成员函数文档
[noexcept, since 6.7]
template <typename X> bool QSharedPointer::owner_before(const QSharedPointer<X> &other) const
[noexcept, since 6.7]
template <typename X> bool QSharedPointer::owner_before(const QWeakPointer<X> &other) const
如果且仅当该智能指针在基于实现定义的所有者排序中位于other 之前时,才返回true
。如果两个智能指针都是空的,或者它们都拥有同一个对象(即使它们的表观类型和指针不同),则该排序被视为等价。
此函数在 Qt 6.7 中引入。
另请参见 owner_equal 。
[noexcept, since 6.7]
template <typename X> bool QSharedPointer::owner_equal(const QSharedPointer<X> &other) const
[noexcept, since 6.7]
template <typename X> bool QSharedPointer::owner_equal(const QWeakPointer<X> &other) const
如果且仅当该智能指针和other 共享所有权时,返回true
。
此函数在 Qt 6.7 中引入。
另请参阅 owner_before 和owner_hash 。
[noexcept, since 6.7]
size_t QSharedPointer::owner_hash() const
返回此智能指针对象基于所有者的哈希值。比较相等的智能指针(根据owner_equal
)将具有相同的基于所有者的哈希值。
此函数在 Qt 6.7 中引入。
另请参见 owner_equal 。
QSharedPointer::QSharedPointer()
创建一个为空的 QSharedPointer(该对象持有nullptr
的引用)。
[noexcept]
template <typename X> QSharedPointer::QSharedPointer(QSharedPointer<X> &&other)
Move- 构造一个 QSharedPointer 实例,使其指向other 所指向的同一对象。
限制条件
只有当X*
隐式转换为T*
时,才参与重载解析。
[explicit]
template <typename X> QSharedPointer::QSharedPointer(X *ptr)
创建指向ptr 的 QSharedPointer。指针ptr 由该 QSharedPointer 管理,不得传递给其他 QSharedPointer 对象或在该对象之外删除。
自 Qt 5.8 起,当该 QSharedPointer 的最后一个引用被销毁时,ptr 将通过调用X
的析构函数被删除(即使X
与 QSharedPointer 的模板参数T
并不相同)。在此之前,T
的析构函数会被调用。
QSharedPointer::QSharedPointer(const QWeakPointer<T> &other)
通过将弱引用other 提升为强引用并共享其指针,创建 QSharedPointer。
如果T
是该类模板参数的派生类型,QSharedPointer 将执行自动转换。否则,编译器会出错。
另请参见 QWeakPointer::toStrongRef().
QSharedPointer::QSharedPointer(std::nullptr_t)
创建一个为空的 QSharedPointer。这等同于 QSharedPointer 默认构造函数。
template <typename X, typename Deleter> QSharedPointer::QSharedPointer(X *ptr, Deleter d)
创建指向ptr 的 QSharedPointer。指针ptr 由该 QSharedPointer 管理,不得传递给其他 QSharedPointer 对象或在该对象之外删除。
删除参数d 指定了该对象的自定义删除程序。当强引用计数下降到 0 时,将调用自定义删除程序,而不是操作符 delete()。例如,这对于在QObject 上调用deleteLater() 非常有用:
static void doDeleteLater(MyObject *obj) { obj->deleteLater(); } void otherFunction() { QSharedPointer<MyObject> obj = QSharedPointer<MyObject>(new MyObject, doDeleteLater); // continue using obj obj.clear(); // calls obj->deleteLater(); }
请注意,自定义删除函数将使用指向X
类型的指针调用,即使 QSharedPointer 模板参数T
并非如此。
也可以直接指定成员函数,如
QSharedPointer<MyObject> obj = QSharedPointer<MyObject>(new MyObject, &QObject::deleteLater);
另请参见 clear().
template <typename Deleter> QSharedPointer::QSharedPointer(std::nullptr_t, Deleter d)
创建一个为空的 QSharedPointer。这等同于 QSharedPointer 默认构造函数。
删除参数d 指定此对象的自定义删除程序。当强引用计数下降到 0 时,将调用自定义删除程序,而不是操作符 delete()。
QSharedPointer::QSharedPointer(const QSharedPointer<T> &other)
创建一个共享other 指针的 QSharedPointer 对象。
如果T
是该类模板参数的派生类型,QSharedPointer 将执行自动转换。否则,编译器会出错。
[noexcept]
QSharedPointer::QSharedPointer(QSharedPointer<T> &&other)
Move- 构造一个 QSharedPointer 实例,使其指向other 所指向的同一对象。
QSharedPointer::~QSharedPointer()
销毁QSharedPointer 对象。如果这是存储的指针的最后一个引用,则也将删除该指针。
void QSharedPointer::clear()
清除QSharedPointer 对象,删除该对象对指针的引用。如果这是最后一次引用,那么指针本身也将被删除。
template <typename X> QSharedPointer<X> QSharedPointer::constCast() const &
执行从该指针类型到X
的const_cast
,并返回共享引用的QSharedPointer 。该函数可用于向上和向下传递,但更多用于向上传递。
另请参阅 isNull() 和qSharedPointerConstCast()。
[since 6.9]
template <typename X> QSharedPointer<X> QSharedPointer::constCast() &&
该函数重载 constCast()。
返回的QSharedPointer 与*this
共享同一组共享所有者。
此函数resets *this
成功后返回nullptr
。
此函数在 Qt 6.9 中引入。
另请参阅 isNull() 和qSharedPointerConstCast()。
[static]
template <typename... Args> QSharedPointer<T> QSharedPointer::create(Args &&... args)
这是一个重载函数。
创建QSharedPointer 对象并分配T
类型的新项目。QSharedPointer 内部结构和对象在一次内存分配中完成,这有助于减少长期运行应用程序中的内存碎片。
该函数将尝试调用T
类型的构造函数,该构造函数可以接受传递的所有参数 (args)。参数将完全转发。
T *QSharedPointer::data() const
返回此对象引用指针的值。
注意:请勿删除此函数返回的指针或将其传递给其他可能删除指针的函数,包括创建QSharedPointer 或QWeakPointer 对象。
template <typename X> QSharedPointer<X> QSharedPointer::dynamicCast() const &
将该指针的类型动态转换为X
,并返回一个共享引用的QSharedPointer 。如果使用此函数进行上投,则QSharedPointer 将执行dynamic_cast
,这意味着如果此QSharedPointer 指向的对象不是X
类型,则返回的对象将为空。
注意:模板类型X
必须与该对象的模板具有相同的 const 和 volatile 限定符,否则转换将失败。如果需要放弃这些限定符,请使用constCast() 。
另请参见 qSharedPointerDynamicCast()。
[since 6.9]
template <typename X> QSharedPointer<X> QSharedPointer::dynamicCast() &&
该函数重载了 dynamicCast()。
返回的QSharedPointer 与*this
的同一组共享所有者共享所有权。
此函数resets *this
成功后返回nullptr
。
此函数在 Qt 6.9 中引入。
另请参阅 qSharedPointerDynamicCast()。
T *QSharedPointer::get() const
与data() 相同。
提供该函数是为了实现 API 与std::shared_ptr
的兼容性。
bool QSharedPointer::isNull() const
如果此对象指向nullptr
,则返回true
。
template <typename X> QSharedPointer<X> QSharedPointer::objectCast() const &
从该指针的类型到X
执行qobject_cast() 并返回共享引用的QSharedPointer 。如果使用此函数进行上转换,则QSharedPointer 将执行qobject_cast
,这意味着如果此QSharedPointer 指向的对象不是X
类型,则返回的对象将为空。
注意:模板类型X
必须与该对象的模板具有相同的 const 和 volatile 限定符,否则转换将失败。如果需要放弃这些限定符,请使用constCast() 。
另请参见 qSharedPointerObjectCast()。
[since 6.9]
template <typename X> QSharedPointer<X> QSharedPointer::objectCast() &&
该函数重载了 objectCast()。
返回的QSharedPointer 与*this
共享同一组共享所有者。
成功时,该函数会将resets *this
转换为nullptr
。
此函数在 Qt 6.9 中引入。
另请参阅 qSharedPointerObjectCast()。
void QSharedPointer::reset()
与clear() 相同。与 std::shared_ptr 兼容。
void QSharedPointer::reset(T *t)
重置QSharedPointer 对象,使其指向t 。等价于
QSharedPointer<T> other(t); this->swap(other);
template <typename Deleter> void QSharedPointer::reset(T *t, Deleter deleter)
重置QSharedPointer 对象,改为指向t ,删除deleter 。等价于
QSharedPointer<T> other(t, deleter); this->swap(other);
template <typename X> QSharedPointer<X> QSharedPointer::staticCast() const &
执行从指针类型到X
的静态转换,并返回共享引用的QSharedPointer 。此函数可用于向上和向下转换,但更多用于向上转换。
注意:模板类型X
必须与该对象的模板具有相同的 const 和 volatile 限定符,否则将导致传递失败。如果需要放弃这些限定符,请使用constCast() 。
另请参阅 dynamicCast()、constCast() 和qSharedPointerCast()。
[since 6.9]
template <typename X> QSharedPointer<X> QSharedPointer::staticCast() &&
该函数重载了 staticCast()。
返回的QSharedPointer 与*this
的同一组共享所有者共享所有权。
此函数resets *this
成功后返回nullptr
。
此函数在 Qt 6.9 中引入。
另请参阅 dynamicCast()、constCast() 和qSharedPointerCast()。
[noexcept]
void QSharedPointer::swap(QSharedPointer<T> &other)
将此共享指针实例与other 互换。该操作速度非常快,从未出现过故障。
QWeakPointer<T> QSharedPointer::toWeakRef() const
返回一个弱引用对象,该对象共享此对象引用的指针。
另请参见 QWeakPointer::QWeakPointer()。
bool QSharedPointer::operator bool() const
如果包含的指针不是nullptr
,则返回true
。该函数适用于if-constructs
,如:
if (sharedptr) { ... }
另请参见 isNull().
bool QSharedPointer::operator!() const
如果此对象指向nullptr
,则返回true
。此函数适用于if-constructs
,如:
if (!sharedptr) { ... }
另请参见 isNull().
T &QSharedPointer::operator*() const
提供对共享指针成员的访问。
如果包含的指针是nullptr
,则行为未定义。
另请参见 isNull()。
T *QSharedPointer::operator->() const
提供对共享指针成员的访问。
如果包含的指针是nullptr
,则行为未定义。
另请参见 isNull()。
[noexcept]
QSharedPointer<T> &QSharedPointer::operator=(QSharedPointer<T> &&other)
Move-assignsother 到此QSharedPointer 实例。
[noexcept]
template <typename X> QSharedPointer<T> &QSharedPointer::operator=(QSharedPointer<X> &&other)
移动--将other 分配给此QSharedPointer 实例。
限制条件
只有当X*
隐式转换为T*
时,才参与重载解析。
QSharedPointer<T> &QSharedPointer::operator=(const QSharedPointer<T> &other)
使该对象共享other 的指针。当前指针引用将被丢弃,如果是最后一个指针引用,该指针将被删除。
如果T
是本类模板参数的派生类型,QSharedPointer 将执行自动转换。否则,编译器会出错。
QSharedPointer<T> &QSharedPointer::operator=(const QWeakPointer<T> &other)
将other 提升为强引用,并使该对象与其引用的指针共享一个引用。当前指针引用将被丢弃,如果是最后一个指针引用,该指针将被删除。
如果T
是该类模板参数的派生类型,QSharedPointer 将执行自动转换。否则,编译器会出错。
相关非成员
[noexcept]
template <typename T> size_t qHash(const QSharedPointer<T> &key, size_t seed = 0)
返回key 的哈希值,使用seed 作为计算的种子。
template <typename X, typename T> QSharedPointer<X> qSharedPointerCast(const QSharedPointer<T> &other)
返回指向other 所持指针的共享指针,并将其投向X
类型。T
和X
必须属于一个层次结构,这样static_cast
才能成功。
请注意,X
必须具有与T
相同的 cv-qualifiers (const
和volatile
),否则代码将无法编译。请使用qSharedPointerConstCast 删除常量。
另请参见 QSharedPointer::staticCast()、qSharedPointerDynamicCast() 和qSharedPointerConstCast()。
[since 6.9]
template <typename X, typename T> QSharedPointer<X> qSharedPointerCast(QSharedPointer<T> &&other)
该函数重载了qSharedPointerCast(const QSharedPointer<T> &other)。
返回的QSharedPointer 与other 的共享所有者集共享所有权。
该函数在成功时将resets other 转换为nullptr
。
此函数在 Qt 6.9 中引入。
另请参阅 QSharedPointer::staticCast(),qSharedPointerDynamicCast() 和qSharedPointerConstCast()。
template <typename X, typename T> QSharedPointer<X> qSharedPointerCast(const QWeakPointer<T> &other)
返回指向other 所持指针的共享指针,并将其投向X
类型。T
和X
必须属于一个层次结构,这样static_cast
才能成功。
other 对象首先被转换为强引用。如果转换失败(因为指向的对象已被删除),该函数将返回空QSharedPointer 。
请注意,X
必须具有与T
相同的 cv-qualifiers (const
和volatile
),否则代码将无法编译。请使用qSharedPointerConstCast 删除常数。
另请参见 QWeakPointer::toStrongRef()、qSharedPointerDynamicCast() 和qSharedPointerConstCast()。
template <typename X, typename T> QSharedPointer<X> qSharedPointerConstCast(const QSharedPointer<T> &src)
返回指向src 所持指针的共享指针,并将其投向X
类型。T
和X
必须属于一个层次结构,const_cast
才能成功。const
和volatile
与T
和X
之间的差异将被忽略。
另请参见 QSharedPointer::constCast()、qSharedPointerCast() 和qSharedPointerDynamicCast()。
[since 6.9]
template <typename X, typename T> QSharedPointer<X> qSharedPointerConstCast(QSharedPointer<T> &&src)
该函数重载了qSharedPointerConstCast(const QSharedPointer<T> &src)。
返回的QSharedPointer 与src 共享同一组共享所有者。
该函数在成功时将resets src 转换为nullptr
。
此函数在 Qt 6.9 中引入。
另请参阅 QSharedPointer::constCast()、qSharedPointerCast() 和qSharedPointerDynamicCast()。
template <typename X, typename T> QSharedPointer<X> qSharedPointerConstCast(const QWeakPointer<T> &src)
返回指向src 所持指针的共享指针,并将其投向X
类型。T
和X
必须属于一个层次结构,const_cast
才能成功。const
和volatile
与T
和X
之间的差异将被忽略。
src 对象首先转换为强引用。如果转换失败(因为指向的对象已被删除),该函数将返回空QSharedPointer 。
另请参见 QWeakPointer::toStrongRef()、qSharedPointerCast() 和qSharedPointerDynamicCast()。
template <typename X, typename T> QSharedPointer<X> qSharedPointerDynamicCast(const QSharedPointer<T> &src)
返回指向src 所持指针的共享指针,使用动态投向类型X
来获取适当类型的内部指针。如果dynamic_cast
失败,返回的对象将为空。
请注意,X
必须具有与T
相同的 cv-qualifiers (const
和volatile
),否则代码将无法编译。请使用qSharedPointerConstCast 删除常量。
另请参阅 QSharedPointer::dynamicCast()、qSharedPointerCast() 和qSharedPointerConstCast()。
[since 6.9]
template <typename X, typename T> QSharedPointer<X> qSharedPointerDynamicCast(QSharedPointer<T> &&src)
该函数重载了qSharedPointerDynamicCast(const QSharedPointer<T> &src)。
返回的QSharedPointer 与src 共享同一组共享所有者。
该函数在成功时将resets src 转换为nullptr
。
此函数在 Qt 6.9 中引入。
另请参阅 QSharedPointer::dynamicCast()、qSharedPointerCast() 和qSharedPointerConstCast()。
template <typename X, typename T> QSharedPointer<X> qSharedPointerDynamicCast(const QWeakPointer<T> &src)
返回指向src 所持指针的共享指针,使用动态投向类型X
来获取适当类型的内部指针。如果dynamic_cast
失败,返回的对象将为空。
src 对象首先转换为强引用。如果转换失败(因为指向的对象已被删除),该函数也会返回空QSharedPointer 。
请注意,X
必须具有与T
相同的 cv-qualifiers (const
和volatile
),否则代码将无法编译。请使用qSharedPointerConstCast 删除常数。
另请参见 QWeakPointer::toStrongRef()、qSharedPointerCast() 和qSharedPointerConstCast()。
template <typename X, typename T> QSharedPointer<X> qSharedPointerObjectCast(const QSharedPointer<T> &src)
qSharedPointerObjectCast 函数用于转换共享指针。
返回一个共享指针到src 持有的指针,使用qobject_cast() 到X
类型,以获得适当类型的内部指针。如果qobject_cast
失败,返回的对象将为空。
请注意,X
必须具有与T
相同的 cv-qualifiers (const
和volatile
),否则代码将无法编译。请使用qSharedPointerConstCast 删除常量。
另请参阅 QSharedPointer::objectCast()、qSharedPointerCast() 和qSharedPointerConstCast()。
[since 6.9]
template <typename X, typename T> QSharedPointer<X> qSharedPointerObjectCast(QSharedPointer<T> &&src)
该函数重载了qSharedPointerObjectCast(const QSharedPointer<T> &src)。
返回的QSharedPointer 与src 共享同一组共享所有者。
该函数在成功时将resets src 转换为nullptr
。
此函数在 Qt 6.9 中引入。
另请参阅 QSharedPointer::objectCast()、qSharedPointerCast() 和qSharedPointerConstCast()。
template <typename X, typename T> QSharedPointer<X> qSharedPointerObjectCast(const QWeakPointer<T> &src)
qSharedPointerObjectCast 函数用于转换共享指针。
返回一个共享指针到src 持有的指针,使用qobject_cast() 到X
类型,以获得适当类型的内部指针。如果qobject_cast
失败,返回的对象将为空。
src 对象首先转换为强引用。如果转换失败(因为指向的对象已被删除),该函数也会返回空QSharedPointer 。
请注意,X
必须具有与T
相同的 cv-qualifiers (const
和volatile
),否则代码将无法编译。请使用qSharedPointerConstCast 删除常数。
另请参见 QWeakPointer::toStrongRef()、qSharedPointerCast() 和qSharedPointerConstCast()。
template <typename X, typename T> std::shared_ptr<X> qSharedPointerObjectCast(const std::shared_ptr<T> &src)
返回指向src 所持指针的共享指针,使用qobject_cast() 类型X
获取相应类型的内部指针。如果qobject_cast
失败,返回的对象将为空。
请注意,X
必须具有与T
相同的 cv-qualifiers (const
和volatile
),否则代码将无法编译。使用 const_pointer_cast 来消除常量。
template <typename X, typename T> std::shared_ptr<X> qSharedPointerObjectCast(std::shared_ptr<T> &&src)
返回一个指向src 所持指针的共享指针,使用qobject_cast() 类型的X
获取相应类型的内部指针。
如果qobject_cast
成功,函数将返回一个有效的共享指针,而src 将重置为空。如果qobject_cast
失败,返回的对象将为空,并且不会修改src 。
请注意,X
必须具有与T
相同的 cv-qualifiers (const
和volatile
),否则代码将无法编译。使用 const_pointer_cast 来消除常量。
template <typename X, typename T> std::shared_ptr<X> qobject_pointer_cast(const std::shared_ptr<T> &src)
返回指向src 所持指针的共享指针。
与qSharedPointerObjectCast() 相同。提供此函数是为了与 STL 兼容。
template <typename X, typename T> std::shared_ptr<X> qobject_pointer_cast(std::shared_ptr<T> &&src)
与qSharedPointerObjectCast() 相同。提供此函数是为了与 STL 兼容。
template <typename T, typename X> bool operator!=(const QSharedPointer<T> &lhs, const QSharedPointer<X> &rhs)
如果lhs 和rhs 指向不同的指针,则返回true
。
如果rhs 的模板参数与lhs 的模板参数不同,QSharedPointer 首先需要确保它们是兼容类型。它将尝试执行自动static_cast
,将T
和X
类型转换为它们的复合指针类型。如果rhs 的模板参数不是lhs 的基类型或派生类型,编译器就会出错。
template <typename T, typename X> bool operator!=(const QSharedPointer<T> &lhs, const X *rhs)
如果lhs 和rhs 指向不同的指针,则返回true
。
如果rhs 的模板参数与lhs 的模板参数不同,QSharedPointer 首先需要确保它们是兼容类型。它将尝试执行自动static_cast
,将T
和X
类型转换为它们的复合指针类型。如果rhs 的模板参数不是lhs 的基类型或派生类型,编译器就会出错。
template <typename T> bool operator!=(const QSharedPointer<T> &lhs, std::nullptr_t)
如果lhs 指向一个有效(即非空)指针,则返回true
。
另请参见 QSharedPointer::isNull()。
template <typename T, typename X> bool operator!=(const T *lhs, const QSharedPointer<X> &rhs)
如果指针lhs 与rhs 引用的指针不是同一个指针,则返回true
。
如果rhs 的模板参数与lhs 的模板参数不同,QSharedPointer 首先需要确保它们是兼容类型。它会尝试执行自动static_cast
,将T
和X
类型转换为它们的复合指针类型。如果rhs 的模板参数不是lhs 的基类型或派生类型,编译器就会出错。
template <typename T> bool operator!=(std::nullptr_t, const QSharedPointer<T> &rhs)
如果rhs 指向一个有效(即非空)指针,则返回true
。
另请参见 QSharedPointer::isNull()。
template <typename T> QDebug operator<<(QDebug debug, const QSharedPointer<T> &ptr)
将ptr 追踪到的指针写入调试对象debug ,用于调试。
另请参阅 调试技巧。
template <typename T, typename X> bool operator==(const QSharedPointer<T> &lhs, const QSharedPointer<X> &rhs)
如果lhs 和rhs 指向同一个指针,则返回true
。
如果rhs 的模板参数与lhs 的模板参数不同,QSharedPointer 首先需要确保它们是兼容类型。它将尝试执行自动static_cast
,将T
和X
类型转换为它们的复合指针类型。如果rhs 的模板参数不是lhs 的基类型或派生类型,编译器就会出错。
template <typename T, typename X> bool operator==(const QSharedPointer<T> &lhs, const X *rhs)
如果lhs 和rhs 指向同一个指针,则返回true
。
如果rhs 的模板参数与lhs 的模板参数不同,QSharedPointer 首先需要确保它们是兼容类型。它将尝试执行自动static_cast
,将T
和X
类型转换为它们的复合指针类型。如果rhs 的模板参数不是lhs 的基类型或派生类型,编译器就会出错。
template <typename T> bool operator==(const QSharedPointer<T> &lhs, std::nullptr_t)
如果lhs 指向nullptr
,则返回true
。
另请参阅 QSharedPointer::isNull() 。
template <typename T, typename X> bool operator==(const T *lhs, const QSharedPointer<X> &rhs)
如果指针lhs 与rhs 引用的指针相同,则返回true
。
如果rhs 的模板参数与lhs 的模板参数不同,QSharedPointer 首先需要确保它们是兼容类型。它将尝试执行自动static_cast
,将T
和X
类型转换为它们的复合指针类型。如果rhs 的模板参数不是lhs 的基类型或派生类型,编译器就会出错。
template <typename T> bool operator==(std::nullptr_t, const QSharedPointer<T> &rhs)
如果rhs 指向nullptr
,则返回true
。
另请参阅 QSharedPointer::isNull() 。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.