shared_ptr的定义
std::shared_ptr<数据类型> ptr = std::make_shared<数据类型>();
智能指针类型的数组定义
std::shared_ptr<数据类型> packet_save_ptr(指向的变量,析构的函数方法);
std::shared_ptr<AVPacket> packet_save_ptr(packet_save,[](AVPacket *packet_save){av_packet_unref(packet_save);});
template<typename _Yp, typename _Deleter,
typename = _Constructible<_Yp*, _Deleter>>
shared_ptr(_Yp* __p, _Deleter __d)
: __shared_ptr<_Tp>(__p, std::move(__d)) { }
/**
* @brief Construct a %shared_ptr that owns a null pointer
* and the deleter @a __d.
* @param __p A null pointer constant.
* @param __d A deleter.
* @post use_count() == 1 && get() == __p
* @throw std::bad_alloc, in which case @a __d(__p) is called.
*
* Requirements: _Deleter's copy constructor and destructor must
* not throw
*
* The last owner will call __d(__p)
*/