工厂函数
智能指针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;
}