为了账号安全,请及时绑定邮箱和手机立即绑定

C++ STL - unordered_map

C++ STL - unordered_map

C++
SMILET 2018-08-08 09:09:47
IDE:vs201541行代码注释后的的输出: 取消注释41行后:编译器报错:   错误 C2512 “Point::Point”: 没有合适的默认构造函数可用 TEST1 d:\program files (x86)\microsoft visual studio 14.0\vc\include\tuple 1180 请问该怎么改? 另外,个人觉得 函数 dosomething() 中的 else情形是多余的?不知道为什么,看到某底层代码有else,搞不懂,来个大神解释一波哈?
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

正如Amedeo所说,你在STL多处用到了Point类,而且该类没有默认合成的构造函数,在执行遇到需要默认实例化该类时就会遇到如上编译错误。

你无法保证在定义STL模板类中何时会实例化你的自定义类,所以最好添加一个默认构造函数。

还有注意到,你注释掉的41行也是存在隐式漏洞的。

其一,你的默认构造函数没有了,默认的拷贝函数和赋值运算符重载也不存在。这里你使用了=运算符,而该定义确实不存在。

其二,你的参数是引用,那么赋值给map键值对中的对象的生命周期就移交给了它的定义语句所在作用域,也就是vector<Point>的地方,你的代码比较简单没有复杂的逻辑关系,但当你的代码复杂后,就无法保证map中是否存储了有效的数据,很可能已经销毁了的对象。

 

以上仅为个人看法,个人水平有限,可能存在疏漏,只是给你提示一下方向。谢谢


查看完整回答
反对 回复 2018-09-07
  • 1 回答
  • 0 关注
  • 777 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信