工厂函数(接shared_ptr智能指针)

工厂函数

智能指针shared_ptr在申请内存的时候需要只用new,这样不用delete破坏了对称性。shared_ptr提供了一个工厂函数。make_shared();用来显示消除new调用。make_shared()可以接受若干个参数,通常make_shared()要比shared_ptr()直接创建对象的方法快切高效。

make_shared()函数的用法。

auto sp = make_shared<string>("make_shared");
suto spv = make_shared<vector<int> >(10,2);
assert(spv -> size() == 10);

将智能指针用于标准容器

有两种方式,一种是将容器作为shared_ptr管理对象,例如shared_ptr<list<T> >,使容器可以安全的共享。

另外一种是将shared_ptr作为容器的元素,如vector<shared_ptr<T> > ,因为,shared_ptr支持拷贝语言和比较操作,符合标准容器对元素的操作,所以可以在容器中安全的容纳元素指针,而不是拷贝。

一段将shared_ptr用于标准库的代码:

#include <boost/smart_ptr.hpp>
#include <iostream>
#include <vector>
int main()
{
	typedef std::vector<boost::shared_ptr<int> > vs;
	vs v(10);

	int i = 0;
	for (auto pos = v.begin(); pos != v.end(); ++pos)
	{
		(*pos) = boost::make_shared<int>(++i);
		std::cout << *(*pos) << " , ";
	}
	std::cout << std::endl;
	boost::shared_ptr<int> p = v[9];
	*p = 100;
	std::cout << "*v[9] = " << *v[9] << std::endl;
	for (auto & ptr:v)
	{		
		std::cout << *ptr << " , ";
	}

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波雅_汉库克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值