智能指针
c/c++最为人诟病的是内存的管理,确保正确的时间,释放掉正确的内存,很难。c++11开始,新的库提供了智能指针,可以自动的管理内存,释放对象占用的内存。
shared_ptr
是一个模板,使用跟指针也几乎没什么差别
shared_ptr p (new string(“abc”));
指向string的指针p
另外可以使用make_shared(q) 来创建一个指向q的智能指针
原理:智能指针内部有个关联的计数器,无论是拷贝还是初始化或者传参等等,计数器都会递增(ps,具体实现不一定是一个计数)一旦计数器变为0,则它会自动释放自己管理的对象,析构,释放内存。
当指向一个对象的最后一个shared _ptr被销毁时,它会调用它所管理对象的析构函数来完成销毁工作。
note:
当shared_ptr 无用之后,注意不要再保留,否则内存会一直不被销毁,消耗内存。
当然局部变量的shared_ptr会自动销毁,但是如果是一个vector等,中间进过了remove等操作,一定要记得,这些值不要忘记销毁,比如erase等操作
unique_ptr
只能有一个unique_ptr指向一个对象
weak_ptr
指向一个shared_ptr管理的对象,但是不增加引用计数