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,如下所示:
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("", "")));