C++ STL - unordered_map

IDE:vs2015

https://img1.mukewang.com/5b9233d9000112fa06300874.jpg

https://img2.mukewang.com/5b9233e00001e16103360272.jpg

41行代码注释后的的输出:

 https://img4.mukewang.com/5b9233f10001bef102210201.jpg

取消注释41行后:编译器报错

:   

错误 C2512 “Point::Point”: 没有合适的默认构造函数可用 TEST1 d:\program files (x86)\microsoft visual studio 14.0\vc\include\tuple 1180

 

请问该怎么改?

 另外,个人觉得 函数 dosomething() 中的 else情形是多余的?不知道为什么,看到某底层代码有else,搞不懂,来个大神解释一波哈?


SMILET
浏览 778回答 1
1回答

智慧大石

正如Amedeo所说,你在STL多处用到了Point类,而且该类没有默认合成的构造函数,在执行遇到需要默认实例化该类时就会遇到如上编译错误。你无法保证在定义STL模板类中何时会实例化你的自定义类,所以最好添加一个默认构造函数。还有注意到,你注释掉的41行也是存在隐式漏洞的。其一,你的默认构造函数没有了,默认的拷贝函数和赋值运算符重载也不存在。这里你使用了=运算符,而该定义确实不存在。其二,你的参数是引用,那么赋值给map键值对中的对象的生命周期就移交给了它的定义语句所在作用域,也就是vector<Point>的地方,你的代码比较简单没有复杂的逻辑关系,但当你的代码复杂后,就无法保证map中是否存储了有效的数据,很可能已经销毁了的对象。&nbsp;以上仅为个人看法,个人水平有限,可能存在疏漏,只是给你提示一下方向。谢谢
打开App,查看更多内容
随时随地看视频慕课网APP