1.auto_ptr的出现,主要是为了解决“有异常抛出时发生内存泄漏”的问题;抛出异常,将导致指针p所指向的空间得不到释放而导致内存泄漏; 2.auto_ptr构造时取得某个对象的控制权,在析构时释放该对象。我们实际上是创建一个auto_ptr<Type>类型的局部对象,该局部对象析构时,会将自身所拥有的指针空间释放,所以不会有内...
auto_ptr pt( new T ); ...代码... } // 当pt出了作用域时析构函数被调用, 从而对象被自动删除 现在代码不会泄漏T类型的对象,不管这个函数是正常退出还是抛出了异常,因为pt的析构函数总是会在出栈时被调用。清理会自动进行。 最后,使用一个auto_ptr就像使用一个内建的指针一样容易,而且如果想要“撤销”...
auto_ptr<map<int,vector<int> > > ptr(new map<int,vector<int> > ()); 当然可以先定义,后赋值,如下所示: auto_ptr<map<int,int> > ptr; ptr = auto_ptr<map<int,int> >(new map<int,int> ()); 作用1:保证一个对象在某个时间只能被一个该种类型的智能指针所指向,就是通常所说的对象所有...
首先,先介绍AutoPtr,为防止一块空间释放两次浅拷贝导致的崩溃情况,我们的思想是权限转移,就是说你拷贝时要将你的两个指针指向同一块空间,可是这样会程序崩溃。解决如下: 1)老版AutoPtr 主要变量是_ptr,_owner,用bool型的_owner来控制权限转移,当它为false值时释放空间,保证释放一次。 #include<iostream>usingname...