auto_ptr是许许多多智能指针中的一种,auto_ptr做这样一件事:拥有一个动态分配内存对象,并且在它不再需要的时候履行自动清理的职责。
下面上一些使用例子:
#include <stdio.h> #include <iostream> #include <memory> #include <vector> using namespace std; class D { public: D() : d(1) {} ~D() { printf("D destruction\n"); } int d; }; void AutoUse() { auto_ptr<D> auto_d(new D()); printf("auto_d: %d\n", auto_d->d); } int _tmain(int argc, _TCHAR* argv[]) { AutoUse(); getchar(); return 0; }
auto_d: 1 D destruction
#include <stdio.h> #include <iostream> #include <memory> #include <vector> using namespace std; class D { public: D() : d(1) {} ~D() { printf("D destruction\n"); } int d; }; void AutoUse() { auto_ptr<D> auto_d(new D()); printf("auto_d: %d\n", auto_d->d); D* p = auto_d.release(); if (p) { printf("p->d: %d\n", p->d); } delete p; } int _tmain(int argc, _TCHAR* argv[]) { AutoUse(); getchar(); return 0; }输出结果:
auto_d: 1 p->d: 1 D destruction
#include <stdio.h> #include <iostream> #include <memory> #include <vector> using namespace std; class D { public: D() : d(1) {} ~D() { printf("D destruction\n"); } int d; }; void AutoUse() { auto_ptr<D> auto_d(new D()); printf("auto_d: %d\n", auto_d->d); auto_d.reset(new D()); } int _tmain(int argc, _TCHAR* argv[]) { AutoUse(); getchar(); return 0; }
auto_d: 1 D destruction D destruction
#include <stdio.h> #include <iostream> #include <memory> #include <vector> using namespace std; class D { public: D() : d(1) {} ~D() { printf("D destruction\n"); } int d; }; void AutoUse() { auto_ptr<D> auto_d(new D()); D* p = auto_d.get(); printf("p->d: %d\n", p->d); } int _tmain(int argc, _TCHAR* argv[]) { AutoUse(); getchar(); return 0; }
p->d: 1 D destruction
#include <stdio.h> #include <iostream> #include <memory> #include <vector> using namespace std; auto_ptr<D> RetAP() { auto_ptr<D> auto_d(new D()); return auto_d; } void AutoUse() { auto_ptr<D> auto_d = RetAP(); printf("auto_d->d: %d\n", auto_d->d); } int _tmain(int argc, _TCHAR* argv[]) { AutoUse(); getchar(); return 0; }
auto_d->d: 1 D destruction
函数返回auto_ptr对象
推荐一篇十分详细的文章: http://www.cppblog.com/mymsdn/archive/2010/04/07/Using-auto_ptr-Effectively.html