auto_ptr是一個非常簡單的句柄類的例子,在<memory>中定義,通過“資源獲得即初始化”技術支持異常安全。auto_ptr保存著一個指針,能夠象指針一樣被使用,并在生存期結束時釋放指向的對象。舉例:
#include<memory>
using namespace std;
struct X {
int m;
// ..
};
void f()
{
auto_ptr<X> p(new X);
X* q = new X;
p->m++; // 象一個指針一樣使用p
q->m++;
// ...
delete q;
}
如果在...部分拋出了一個異常,p持有的對象將被auto_ptr的析構函數正確地釋放,而q指向的X對象則產生了內存泄漏。更多的細節,參見《C++程序設計語言》14.4.2節。
auto_ptr是一個非常簡單的類。特別地,它不是一個引用計數(reference counted)的指針。如果你將一個auto_ptr賦值給另一個,那么被賦值的auto_ptr將持有指針,而原來的auto_ptr將持有0。舉例:
#include<memory>
#include<iostream>
using namespace std;
struct X {
int m;
// ..
};
int main()
{
auto_ptr<X> p(new X);
auto_ptr<X> q(p);
cout << "p " << p.get() << " q " << q.get() << "\n";
}
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/