大佬教程收集整理的这篇文章主要介绍了c – 初始化一个const映射,其中shared_ptr为值,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
比方说,我有一个带有B的A类,而来自A的C.
我希望能够创建一个地图
const map<int,shared_ptr<A>> mymap
并使用值初始化地图:
{1,new B()} and {2,new C()}
但使用初始化列表会出错.
有什么帮助我怎么能这样做?
const map<int,shared_ptr<A>> mymap = { {1,shared_ptr<B>(new B())},{2,shared_ptr<C>(new C())} };
C 11标准的第20.7.2.2段要求shared_ptr<>的构造函数接受一个显式的原始指针:
template<typename Y> explicit shared_ptr(Y* p);
问题是你正在尝试构造std :: pair< int,shared_ptr< A>>的实例.通过将原始指针作为第二个参数传递给对<>的构造函数,该构造函数接受shared_ptr< A>.基本上,这与以下相同:
pair<int,shared_ptr<A>> mymap(1,new B()); // ERROR! pair<int,shared_ptr<B>(new B())); // OK
这就是说,除非你有充分的理由去做其他的并且你真的知道你在做什么,最好还是使用std :: make_shared<>()来创建共享指针,这都是因为效率(它执行一个内存)分配而不是两个)和异常安全(如果B或C的构造函数抛出异常,它将不会泄漏).因此,您的地图初始化应如下所示:
const map<int,make_shared<B>()},make_shared<C>()} };
以上是大佬教程为你收集整理的c – 初始化一个const映射,其中shared_ptr为值全部内容,希望文章能够帮你解决c – 初始化一个const映射,其中shared_ptr为值所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。