shared_ptr疑点
shared_ptr疑问
看到这么一段:
请问第一句为什么会比第二句多一次new?
------解决思路----------------------
shared_ptr 需要引用计数器,第一种写法,new ManagedClass 的时候 new 了一次,shared_ptr 构造函数需要再 new 一次分配引用计数器的空间,所以是两次 new。第二种写法,构造新对象和引用技术器全是 shared_prt 构造函数的事情,所以可以把他们两个需要的内存空间合并,只用一次 new 全部分配出来,然后在使用 placement new (只调用构造函数而已)在已有空间上构造对象。
看到这么一段:
std::shared_ptr< ManagedClass > shared_sp1(new ManagedClass);//两次new
std::shared_ptr< ManagedClass > shared_sp2 = std::make_shared< ManagedClass >() //一次new
请问第一句为什么会比第二句多一次new?
------解决思路----------------------
shared_ptr 需要引用计数器,第一种写法,new ManagedClass 的时候 new 了一次,shared_ptr 构造函数需要再 new 一次分配引用计数器的空间,所以是两次 new。第二种写法,构造新对象和引用技术器全是 shared_prt 构造函数的事情,所以可以把他们两个需要的内存空间合并,只用一次 new 全部分配出来,然后在使用 placement new (只调用构造函数而已)在已有空间上构造对象。