1 shared_ptr
#include <iostream>
#include <tr1/memory>
using namespace std;
class A
{
public:
A(){cout<<"constructor A"<<endl;}
virtual ~A(){cout<<"destroy A"<<endl;}
virtual void show() = 0;
};
class B : public A
{
public:
B(){cout<<"constructor B"<<endl;}
~B(){cout<<"destroy B"<<endl;}
void show(){
cout<<"&&&&&&&&&&&&&&&&&&&&&"<<endl;
}
};
void f(void)
{
}
int main() {
tr1::shared_ptr<A> b(new B());
b->show();
return 0;
}
结果
constructor A
constructor B
&&&&&&&&&&&&&&&&&&&&&
destroy Bdestroy A
2 auto_ptr
#include <iostream>
#include <memory>
using namespace std;
class TC
{
public :
TC(){cout<<"TC()"<<endl;}
~TC(){cout<<"~TC()"<<endl;}
void show()
{
cout<<"*************************"<<endl;
}
};
void fool(bool isThrow)
{
/**
* 可管理由new分配的单个对象,但无法管理动态分配的数组,auto_ptrs也不能保存在STL容器中
*/
auto_ptr<TC> pTC(new TC);
pTC->show();
try{
if(isThrow)
throw "aa";
}catch(const char* e){
throw;
}
}
void test(void)
{
try{
fool(true);
}catch(...){
cout<<"caught"<<endl;
}
}
int main(int argc,char **argv)
{
test();
int x;
cin>>x;
return 0;
}