C++primer 5th 实现自己版本的make_shared(以及C++14的make_unique)

本文探讨C++ primer 5th中课后习题,讲解如何实现自定义的make_shared和C++14的make_unique。这两个函数作为可变参数模板,将参数转发给shared_ptr和unique_ptr构造函数。文章对比了标准库的std::make_shared和std::make_unique,强调使用它们可以提高代码可读性和异常安全性,并解释了为何在需要自定义删除器时需使用new操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值