您的位置:首页 > 运维架构 > Linux

(原)C++智能指针——释放器(in linux, g++)

2012-08-14 09:57 232 查看
我的记录:

1.指定了释放器,就不会去直接调用析构函数。因为释放器就一个。不指定的话析构函数就是释放器.

2.STL智能指针对内置内型的支持不如class:比如shared_ptr<char> s(new char[10]); memset(s, 0x00, 10);//error! 只能memset(s.get(), ....了。

3. auto_ptr不能指定释放器.

#include "iostream"
#include <tr1/memory>

using namespace std;
using std::tr1::shared_ptr;
using std::auto_ptr;

class C
{
public:
C()
{
cout<<"C()"<<endl;
buf = new char[10];
}
~C()
{
cout<<"~C()"<<endl;
if(buf)
{
cout<<"~C() delete []buf."<<endl;
delete [] buf;
}
}
static void MyRelease(C * pC)
{
cout<<"MyRelease()"<<endl;
cout<<"MyRelease() delete [] buf."<<endl;
delete [] pC->buf;
pC->buf = NULL;
cout<<"MyRelease() delete C:";
delete pC;//call ~C().
}

private:
char * buf;
};

int main()
{
cout<<"std::tr1::shared_ptr<C>:"<<endl;
{
C * a = new C;
shared_ptr<C> shareC(a, C::MyRelease);
}
cout<<"<- shared_ptr test ended.\n"<<endl;

cout<<"std::tr1::shared_ptr<C> copy test"<<endl;
{
shared_ptr<C> shareC(new C, C::MyRelease);
shared_ptr<C> shareC2 = shareC;
}
cout<<"<- shared_ptr copy test ended.\n"<<endl;

cout<<"std::auto_ptr<C>:"<<endl;
C * b = new C;
auto_ptr<C> autoC(b);

cout<<"return 0;"<<endl;
return 0;
}


$ g++ main.cpp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: