一、使用
make_shared是标准库函数,此函数在动态内存中分配一个对象并初始化它,返回指向此对象的shared_ptr。由于是通过shared_ptr管理内存,因此这是一种安全分配和使用动态内存的方法。
shared_ptr<int> p3 = make_shared<int>(42);
////p4指向一个值为"9999999999"的string
shared_ptr<string> p4 = make_shared<string>(10,'9');
shared_ptr<string> p2 = make_shared<string>("hello");
shared_ptr<int> p5 = make_shared<int>();
auto spw = std::make_shared<Widget>();
二、原理
make_shared模板实现
template<typename _Tp, typename... _Args>
inline shared_ptr<_Tp>
make_shared(_Args&&... __args)
{
typedef typename std::remove_const<_Tp>::type _Tp_nc;
return std::allocate_shared<_Tp>(std::allocator<_Tp_nc>(),
std::forward<_Args>(__args)...);
}
template<typename _Tp, typename _Alloc, typename... _Args>
inline shared_ptr<_Tp>
allocate_shared(const _Alloc& __a, _Args&&... __args)
{
return shared_ptr<_Tp>(_Sp_make_shared_tag(), __a,
std::forward<_Args>(__args)...);
}
参考: