C++中的智能指针是用来管理外界资源的,如在堆上边new的资源,当程序还没来得及执行delete操作,函数遇到异常了,没有释放资源,导致内存泄露 如下代码:
void fun()
{
A *ptr = new A();
/*...
...*/ //程序可能在这行代码中抛出异常,导致ptr所指向堆上的资源没有释放
delete ptr;
}
智能指针是怎么解决这个问题的
智能指针在实现上也是一个类,即有构造函数、析构函数,在函数结束之前 类会自动调用析构函数,析构函数会释放资源,所以当遇到异常时,资源也会被正确的释放掉。
接下来介绍 auto_ptr、unique_ptr、 share_ptr、weak_ptr四种智能指针
auto_ptr
auto_ptr是弱智能指针 一个资源只能被一个auto_ptr拥有,当智能指针赋值的时候拥有权就会发生转移,如下代码
因为会发生所有权的转移所以auto_ptr不能用在STL标准容器中
void Fun(auto_ptr<A> &ptr)
{
cout << ptr -> a << endl;
cout << "Fun faction end" << endl;
}
//auto_ptr
void Test()
{
auto_ptr<A> aptr(new A(5));
auto_ptr<A> bptr;
bptr = aptr; //赋值运算