欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > Qt 智能指针

Qt 智能指针

2024/10/25 7:24:37 来源:https://blog.csdn.net/weixin_41799721/article/details/142615312  浏览:    关键词:Qt 智能指针

Qt 中智能指针包括:

  • QSharedPointer ----> std::shared_ptr 引用计数

多个线程同时修改 QSharedPointer 指向的数据时还要应该考虑 加锁

  • QScopedPointer ----> std::uniq_ptr 独占
  • QScopedArrayPointer
  • QWeakPointer ----> std::weak_ptr 弱引用计数
  • QPointer

用于指向 QObject 及派生类的对象。当一个 QObject 或派生类对象被删除后,QPointer 能自动把其内部的指针设为 0
当QPointer 对象超出作用域时,并不会删除它指向的内存对象。这和其他的智能指针是不同的

  • QSharedDataPointer ----> 实现数据的隐式共享(写时复制 copy-on-write))
  • QExplicitlySharedDataPointer -->同上,但是它禁用了写时复制功能
class EmployeeData : public QSharedData {
public:EmployeeData() : id(-1) { }EmployeeData(const EmployeeData &other): QSharedData(other), id(other.id), name(other.name) {}//要隐式共享和写时拷贝的数据int id;QString name;
};
class Employee {
public:Employee() { d = new EmployeeData; }Employee(const Employee &other) : d (other.d) {}Employee(int id, const QString &name) {d = new EmployeeData;setId(id);setName(name);}Employee(const Employee &other) : d (other.d){}void setId(int id) { d->id = id; }int id() const { return d->id; }void setName(const QString &name) { d->name = name; }QString name() const { return d->name; }private:// 把需要隐式共享的数据(id,name)封装到另一个类中QSharedDataPointer<EmployeeData> d;
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com