C++make_shared的使用

一、使用

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)...);
}

参考:

https://blog.csdn.net/CPriLuke/article/details/79462791

猜你喜欢

转载自blog.csdn.net/sinat_31608641/article/details/107346344