我正在尝试编译google的稀疏哈希映射,但是有一个错误。该错误消息似乎与使用unique_ptr
有关。我删除unique_ptr
编译成功后。
google::sparse_hash_map<std::string, std::unique_ptr<int>> testers_;
错误信息如下。有什么建议?非常感谢!
build/libgcc/include/c++/trunk/bits/stl_pair.h:127:17: note: explicitly defaulted function was implicitly deleted here
constexpr pair(const pair&) = default;
^
build/libgcc/include/c++/trunk/bits/stl_pair.h:102:11: note: copy constructor of 'pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char>, std::basic_string<char> >, std::unique_ptr<int, std::default_delete<int> > >' is implicitly deleted because field 'second' has a deleted copy constructor
_T2 second; /// @c second is a copy of the second object
^
/build/libgcc/include/c++/trunk/bits/unique_ptr.h:356:7: note: 'unique_ptr' has been explicitly marked deleted here
unique_ptr(const unique_ptr&) = delete;
答案 0 :(得分:1)
我认为根源存在问题。
unique_ptr的目的是只有一个指向特定资源的指针所有者。最后一个检索unique_ptr的副本。
考虑容器,这意味着如果有人要求资源,地图无法保存您指向的对象的副本,使地图本身无效(即:该条目在其后面将具有无效的唯一指针)首先“得到”它)
我相信一些Cx11约束禁止编译以避免错误。