C++ 在std::map中插入boost::unique\u ptr

C++ 在std::map中插入boost::unique\u ptr,c++,boost,g++,C++,Boost,G++,我正在尝试将一个boost::unique\u ptr存储在std::map中。我使用的编译器是g++3.4(/usr/bin/g++34-I./boost\u 1\u 62\u 0/test\u boost\u unique\u ptr.cpp) #包括 #包括 #包括 #包括 #包括 使用名称空间boost::movelib; 类型定义标准::地图管理器; 类型定义管理器::常量迭代器管理器; 经理; int main() { 独特的ptrp(新的int(10)); std::coutval

我正在尝试将一个
boost::unique\u ptr
存储在
std::map
中。我使用的编译器是g++3.4(
/usr/bin/g++34-I./boost\u 1\u 62\u 0/test\u boost\u unique\u ptr.cpp

#包括
#包括
#包括
#包括
#包括
使用名称空间boost::movelib;
类型定义标准::地图管理器;
类型定义管理器::常量迭代器管理器;
经理;
int main()
{
独特的ptrp(新的int(10));

std::cout
value\u type
std::map
需要
insert
的复制构造函数
boost::unique\u ptr
有一个私有复制构造函数(我想可能已经删除了)

您只需使用
emplace
(您还需要
std::move
boost::move
it):

但是…如果你有“代码> STD::MAP:EMPOTS/CODE >,那么编译器支持C++ 11,那么你可以考虑使用<代码> STD::UnQuyJPPT< /COD>而不是Boosi.

p.S.


g++3.4.6已经超过10年了,在最近的boost版本中可能会出现一些问题。使用过时的编译器有什么特别的原因吗?

有什么好的理由需要使用一个古老的编译器吗?和
boost::unique_ptr
而不是
std::unique_ptr
?@TobySpeight代码库非常古老,没有被修改过很长一段时间了。我曾建议升级编译器,但他们现在还没有准备好。我想可能是这样的;我不羡慕你的任务!我正在处理遗留代码库。他们还不想升级到c++11。
#include <iostream>
#include <map>
#include <boost/move/unique_ptr.hpp>
#include <boost/move/make_unique.hpp>
#include <boost/ptr_container/ptr_map.hpp>

using namespace boost::movelib;
typedef std::map<const int, unique_ptr<int> > MGR_T;
typedef MGR_T::const_iterator MGR_ITER_T;
MGR_T mgrPluginCache;

int main()
{
    unique_ptr<int> p (new int(10));
    std::cout << "p = " << *p << std::endl;
    mgrPluginCache.insert(std::make_pair(1, boost::move(p)));
//    mgrPluginCache[0] = (boost::move(p));

    return 0;
}
mgrPluginCache.emplace(1, boost::move(foo));