C++primer 5th 实现自己版本的make_shared

课后习题 实现自定义版本的make_shared
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;
}
int main() {
	auto ip = my_make_shared<int>(42);
	cout << *ip << endl;
	auto sp = my_make_shared<string>(10,'c');
	cout << *sp << endl;
	cout << *sp << endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/sinat_40408114/article/details/89488898
今日推荐