gpt4 book ai didi

c++ - 是否可以将 unique_ptr 存储在 QPairs 的 QList 中?

转载 作者:行者123 更新时间:2023-12-01 14:08:46 25 4
gpt4 key购买 nike

为了避免大量不必要的复制,我试图将 unique_ptr 存储在一对列表中。我正在使用一个简单的类 Test,它带有一个 QString;

我正在使用 VS2013 和 Qt5.4

using std::unique_ptr;

QList<QPair<unique_ptr<Test>, unique_ptr<Test>>> list;

auto a = std::make_unique<Test>("a");
auto b = std::make_unique<Test>("b");

// First make a pair
auto pair = qMakePair(std::move(a), std::move(b)); // Fails
// Error C2280 - attempting to reference a deleted function

由于失败,我尝试了:
QList<std::pair<unique_ptr<Test>, unique_ptr<Test>>> list;
auto pair = std::make_pair(std::move(a), std::move(b)); // Succes
list.append(std::move(pair)); // Fails
// Error C2280 - attempting to reference a deleted function

由于失败,我完全改为 STL 容器:
std::list<std::pair<unique_ptr<Test>, unique_ptr<Test>>> list;
auto pair = make_pair(std::move(a), std::move(b)); // Succes
list.push_back(std::move(pair)); // Succes

这有效。我的结论是否正确,这些 Qt 容器不支持移动语义,而我必须使用 STL?

最佳答案

std::unique_ptr不可复制,所以 Qt 容器不行。

在 std::move(甚至 std::string)之前创建的 Qt 容器成为一件事。

或许 Qt6 会有更好的支持。它准备打破一些东西以更好地与现代 C++ 集成。

OTOH,如果标准容器对你有用,你也可以使用它们,除非你有一些特定的用例?

关于c++ - 是否可以将 unique_ptr 存储在 QPairs 的 QList 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29276881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com