RAII是什么?
RAII是Resource Acquisition Is Initialization(wiki上面翻译成 “资源获取就是初始化”)的简称,是C++语言的一种管理资源、避免泄漏的惯用法。利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源
以下例子在线程结束时自动析构线程对象,释放资源
Thead虚基类:
#include
class Thread
{
public:
Thread();
virtual ~Thread();
void Start();
void Join();
void SetAutoDelete(bool autoDelete);
private:
static void* ThreadRoutine(void* arg);
virtual void Run() = 0;
pthread_t threadId_;
bool autoDelete_;
};
Thread::Thread() : autoDelete_(false)
{
cout<<"Thread ..."<(arg); //基类指针指向子类对象
thread->Run(); //执行子类虚函数
if (thread->autoDelete_) //当线程执行完任务后,自行释放该对象资源
delete thread;
return NULL;
}
void Thread::SetAutoDelete(bool autoDelete)
{
autoDelete_ = autoDelete;
}
;>
继承虚基类,实现虚函数Run
class TestThread : public Thread
{
public:
TestThread(int count) : count_(count)
{
cout<<"TestThread ..."<;>
main函数测试
TestThread* t2 = new TestThread(5);
t2->SetAutoDelete(true); //设置自动销毁对象
t2->Start();
t2->Join();