admin管理员组

文章数量:1794759

Qt QList<std::unique

代码语言: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 删除stduniqueqt容器contacts

本文标签: Qt QList<stdunique