但是shared_ptr支持自定义析构,而make_shared不支持
后来我就只好把make_shared改回shared_ptr构造函数,一切就都正常了,而且没有调用我之前添加的Quote拷贝构造函数形参是指针的版本,自己测试也发现确实make_shared和shared_ptr构造函数的实际对象类型不同:还发现make_shared的第二个模版参数是指针类型,形参是指向右值引用的指针类型,而shared_ptr构造函数的第二个模版参数...
区别是:std::shared_ptr构造函数会执行两次内存申请,而std::make_shared则执行一次。 std::shared_ptr在实现的时候使用的refcount技术,因此内部会有一个计数器(控制块,用来管理数据)和一个指针,指向数据。因此在执行std::shared_ptr<A> p2(new A)的时候,首先会申请数据的内存,然后申请内控制块,因此是两次内存...
再转换成shared_ptr,则会有两次动态内存分配。而如果直接用make_shared进行创建,则可以只有一次动态内存...
它们的区别在于 make_shared 只有一次内存申请操作,而 shared_ptr 构造函数会有两次。 shared_ptr 对象会管理两部分内容, 控制块,比如引用计数、deleter 等等 要被管理的对象 当调用 make_shared 的时候,会申请一份足够大的内存同时给控制块和对象使用。而 shared_ptr 构造函数会分别为控制块和对象调用内存申请,详...
智能指正的make_..class MyClass{public:int getData() { return data; }static std::shared_ptr<MyClass> getInstance
从异常安全的角度来看,make_shared也是更佳的选择。当通过new创建对象,并将其传递给shared_ptr构造函数时,如果在new表达式和shared_ptr构造函数之间发生异常,那么已经分配的内存将无法被释放,导致内存泄漏。而make_shared将对象构造和shared_ptr的初始化打包在一起,如果在对象构造期间抛出异常,make_shared可以确保没有内...
使用std::make_shared简化了代码,只需一个函数调用即可创建并初始化std::shared_ptr。更重要的是,它...
还有另一种不同的情况:如果需要调用非公共构造函数(受保护的或私有的),make_shared可能无法访问它,而...