众所周知,C#和java中不需要开发人员自己释放内存,对象引用计数为零后.Net和Java虚拟机会对对象进行自动回收,从而防止内存泄露;但是C++语言中,在堆上分配的内存必须自己去管理,不用的时候要自己释放,如果管理不当就可能会出现内存泄露。
C++11提供了智能指针,使用智能指针后不需要用户自己释放内存空间,一旦使用时对象超出了自己的生命周期,就会进行自动释放,从而有效解决了内存泄露的问题。
在实际编程时,有三种智能指针可供使用,分别是:std::shared_ptr、std::unique_ptr和std::weak_ptr。
1 共享智能指针:std::shared_ptr
std::share_ptr指针的每一个拷贝都指向同一个对象,只有在引用计数为零时内存才会被释放。
指针声明原型为:
template <class T> class shared_ptr;
1.1 std::shared_ptr的用法
std::shared_ptr指针可以有三种方法进行初始化,分别是构造函数、辅助函数以及reset方法进行初始化化,代码如下所示:
int main () {
std::shared_ptr<int> sp;
sp.reset (new int); //reset函数初始化
*sp=10;
std::cout << *sp << '\n';
std::shared_ptr<int> p(new int(1));//构造函数初始化
std::cout<< *p << std::endl;
std::shared_ptr<int> foo = std::make_shared<int> (20);
std::cout<< *foo << std::endl;
return 0;
}
代码运行结果为:10 1 20
从上面代码可以看出,智能指针使用方法和普通指针使用方法类似,但是智能指针不需要自己管理内存。
1.2 获取原始指