不能在向量中的地图内使用 unique_ptr?
Cannot use unique_ptr inside a map in a vector?
我想在 vector
中的 map
中使用 unique_ptr
。但是我收到一条错误消息。
我不确定为什么以及如何解决这个问题。
这是代码。
#include <memory>
int main(int argc, char** argv)
{
std::vector<std::map<int, std::unique_ptr<std::string>>> outputContainers;
std::map<int, std::unique_ptr<std::string>> outputContainer;
outputContainer[0] = std::make_unique<std::string>("test");
outputContainers.push_back(std::move(outputContainer));
}
这是一条错误消息。
Error C2280 'std::pair<const int,std::unique_ptr<std::string,std::default_delete<std::string>>>::pair(const std::pair<const int,std::unique_ptr<std::string,std::default_delete<std::string>>> &)': attempting to reference a deleted function test C:\Program Files (x86)\Microsoft Visual Studio19\Professional\VC\Tools\MSVC.24.28314\include\xmemory 671
当一个向量需要重新分配时,如果,它可能会将元素移动到新的存储;否则,它必须复制(因此如果任何构造函数抛出异常,它可以恢复到原始状态)。
std::map
的移动构造函数 。一些实现可能会提供比标准要求更强的保证,并使其成为noexcept
;其他人可能不会。
这两个事实的相互作用导致不可移植的仅移动类型地图向量 - 它可以编译一些实现,但不能编译其他实现。
我想在 vector
中的 map
中使用 unique_ptr
。但是我收到一条错误消息。
我不确定为什么以及如何解决这个问题。
这是代码。
#include <memory>
int main(int argc, char** argv)
{
std::vector<std::map<int, std::unique_ptr<std::string>>> outputContainers;
std::map<int, std::unique_ptr<std::string>> outputContainer;
outputContainer[0] = std::make_unique<std::string>("test");
outputContainers.push_back(std::move(outputContainer));
}
这是一条错误消息。
Error C2280 'std::pair<const int,std::unique_ptr<std::string,std::default_delete<std::string>>>::pair(const std::pair<const int,std::unique_ptr<std::string,std::default_delete<std::string>>> &)': attempting to reference a deleted function test C:\Program Files (x86)\Microsoft Visual Studio19\Professional\VC\Tools\MSVC.24.28314\include\xmemory 671
当一个向量需要重新分配时,如果
std::map
的移动构造函数 noexcept
;其他人可能不会。
这两个事实的相互作用导致不可移植的仅移动类型地图向量 - 它可以编译一些实现,但不能编译其他实现。