C++ 创建引用和创建对象之间的主要区别是什么?

C++ 创建引用和创建对象之间的主要区别是什么?,c++,object,map,reference,boost-extension,C++,Object,Map,Reference,Boost Extension,所以不久前我在玩Boost.Extension示例 std::地图计算机; computers.swap(types.get()); 但当我开始移植这个项目时,我发现我不能使用他们用来创建地图的方法。我总是在那条线上(实际上是在那条线上)。因此: map&computers(type.get()); (他们在中使用)并将其全部编译。我对C++很陌生,可能没有很多。 那么从链接创建地图和简单创建地图之间的区别是什么呢 更新-完整错误消息 错误1错误C2512: boost::extension

所以不久前我在玩Boost.Extension示例

std::地图计算机;
computers.swap(types.get());
但当我开始移植这个项目时,我发现我不能使用他们用来创建地图的方法。我总是在那条线上(实际上是在那条线上)。因此:

map&computers(type.get());
(他们在中使用)并将其全部编译。我对C++很陌生,可能没有很多。 那么从链接创建地图和简单创建地图之间的区别是什么呢

更新-完整错误消息

错误1错误C2512: boost::extensions::basic_type_map::type_map_convertible::type_holder: 没有合适的默认构造函数 可用c:\users\avesta\downloads\extension svn source\boost\extension\type\u map.hpp 74 Mltiple继承


区别在于,第二种情况根本不创建地图;它创建对已存在的映射的引用
types
包含一个映射,而
types.get()
返回对该映射的引用,您可以使用该引用初始化自己的引用。如果您使用该引用修改映射,则您正在修改
类型中包含的映射


第一种情况确实创建了一个空映射;然后它将其与
类型
中包含的映射(可能是非空的)交换,之后将
类型
保留为空。这将需要各相关阶层的更多支持;有些可能需要默认可构造、可交换,并且可能需要可复制和/或可分配。错误代码似乎表明其中一个类需要一个公共默认构造函数,但没有;如果包含整个错误消息,可能有助于诊断问题。

区别在于第二种情况根本不创建映射;它创建对已存在的映射的引用
types
包含一个映射,而
types.get()
返回对该映射的引用,您可以使用该引用初始化自己的引用。如果您使用该引用修改映射,则您正在修改
类型中包含的映射


第一种情况确实创建了一个空映射;然后它将其与
类型
中包含的映射(可能是非空的)交换,之后将
类型
保留为空。这将需要各相关阶层的更多支持;有些可能需要默认可构造、可交换,并且可能需要可复制和/或可分配。错误代码似乎表明其中一个类需要一个公共默认构造函数,但没有;如果包含整个错误消息,可能有助于诊断问题。

错误消息是否告诉您哪个类缺少默认构造函数?错误消息是否告诉您哪个类缺少默认构造函数?
  std::map<std::string, factory<computer> > computers;
  computers.swap(types.get());
map<string, factory<computer> >& computers(types.get());