下面是一个智能指针使用的例子(以下的内容仅仅针对std::shared_ptr这一个智能指针)


先说几个问题,shared_ptr的智能指针会存在循环引用的问题,这个问题在开发的时候需要注意。这里我想说我使用智能指针的一个初衷。
从例子可以看出,我使用容器vector,C++比C的优势处在于,C++的标准库提供了大量的容器和算法,但是,容器的使用上面,我们的建议是不要存留大对象(泛指拷贝构造函数庞大的类),原因就不多解释了,大对象的考虑和副本生成是非常耗费时间的,为了解决这个问题,我们采用对象的指针,这样容器中就可以存入这些对象的指针,易于我们的操作!
引入指针以后,我们面临一个问题,就是内存释放的问题,我们必须小心处理这个问题,否则很容易出现内存泄漏的问题。
这里使用share_ptr的原因就是为了规避这个内存管理的问题,可以从例子很容易看出,我们并没有太多的关系这个对象的释放问题。不过,如何将一个堆上的指针封装到一个智能指针的对象也是一个问题,这里使用了std::make_shared解决这个问题,

但是对于很多其他的使用new的方式生成的指针,我们可以使用对象的方式进行赋值

另外对于智能指针对象还提供了reset函数用来重置所封装的指针。
网友评论