C++primert 5th 课后习题 实现自定义版本的make_shared(以及C++14的make_unique)
make_shared是如何工作的:make_shared应该是一个可变参数模板函数,它将接收的所有参数转发给shared_ptr的构造函数 然后返回一个shared_ptr指针的副本
//返回std::shared_ptr
template <typename T, typename... Args>
shared_ptr<T> my_make_shared(Args&&... args) {
//将模板参数的形参类型设置为Args&&右值引用和将传给T的构造函数的形参使用std::forward可保留我们转发调用该模板函数时实参的所有属性
//先调用类型T的构造函数new出一个新内存空间 然后将控制权传给shared_ptr的构造函数
shared_ptr<T> ret(new T(std::forward<Args>(args)...));//参数args的模式是:对每一个arg都调用std::forward<Arg>(arg)
//返回shared_ptr的一个副本 因为该模板函数返回类型是shared_ptr 因此会再调用一次shared_ptr的拷贝构造函数 递增目标(接收)对象的引用计数 递减该临时副本的引用计数
return ret;
}
同样的方式可以实现我们自定义版本的make_unique:
template <typename