auto_ptr是C++标准库中<memory>为了解决资源泄漏的问题提供的一个智能指针类模板。auto_ptr的实现原理是RAII,在构造的时获取资源,在析构的时释放资源。
下面通过一个例子掌握auto_ptr的使用和注意事项。
事例类的定义:
#pragma once #include <iostream> using namespace std; class Test { public: Test(); ~Test(void); int id; int GetId(); }; #include "Test.h" int count=0; Test::Test() { count++; id=count; cout<<"Create Test"<<this->id<<endl; } Test::~Test(void) { cout<<"Destory Test"<<this->id<<endl; } int Test::GetId() { return id; }
auto_ptr的使用:
#include "Test.h" #include <memory> using namespace std; void Sink(auto_ptr<Test> a) { cout <<"Sink "; ///*转移所有权给a,此时test1无效了,在函数中为形参,函数结束则释放。 } auto_ptr<Test> Source() { auto_ptr<Test> a(new Test()); return a; } int main(int arg,char * agrs) { auto_ptr<Test> test1=Source(); auto_ptr<Test> test2_1(new Test()); auto_ptr<Test> test2_2=test2_1; /*转移所有权,此时test2_1无效了*/ Sink(test1); cout <<"test2_2 Id "<< test2_2->GetId()<<endl; // cout << test2_1->GetId()<<endl;//出错,此时test2_1无效, return 0; }
运行结果:
原文:http://www.cnblogs.com/shencheng5721/p/3694613.html