前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Qt QList<std::unique_ptr<Contact>> 的问题

Qt QList<std::unique_ptr<Contact>> 的问题

作者头像
用户11332765
发布2024-10-28 16:13:12
发布2024-10-28 16:13:12
11600
代码可运行
举报
文章被收录于专栏:编程编程
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
复制
QList<std::unique<Concat>> m_contacts;
m_contacts.emplaceBack(new Contact("", ""));
m_contacts.emplaceBack(new Contact("", ""));
m_contacts.emplaceBack(new Contact("", ""));
m_contacts.emplaceBack(new Contact("", ""));

第二行的 emplaceBack() 报错 原因如下:

在给定的代码中,第二行 m_contacts.emplaceBack(); 报错的原因是 std::unique_ptr 对象不能直接通过 emplace_back() 函数插入到 QList 容器中。 std::unique_ptr 是一个独占所有权的智能指针,它不支持拷贝操作,只能通过移动语义来转移所有权。而 QList 是一个基于值语义的容器,要求存储的元素类型必须支持拷贝构造和拷贝赋值操作。 解决此问题的一种方法是将 std::unique_ptr 包装在一个额外的类中,该类支持拷贝操作,并将该类的对象存储在 QList 中。例如,可以创建一个自定义的包装类 UniqueConcatWrapper,如下所示:

代码语言:javascript
代码运行次数:0
复制
struct UniqueConcatWrapper {
    QSharedPointer<Contact> ptr;
    UniqueConcatWrapper(QSharedPointer<Contact> ptr) : ptr(ptr) {}
};

class ContactView : public QListView {
    QList<UniqueConcatWrapper> m_contacts;
};

m_contacts.emplace_back(QSharedPointer<Contact>(new Contact("", "")));
m_contacts.emplace_back(QSharedPointer<Contact>(new Contact("", "")));
m_contacts.emplace_back(QSharedPointer<Contact>(new Contact("", "")));
m_contacts.emplace_back(QSharedPointer<Contact>(new Contact("", "")));
m_contacts.emplace_back(QSharedPointer<Contact>(new Contact("", "")));
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档