注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

HongMain 的博客

关注编程技术: Linux, Windows, C/C++

 
 
 

日志

 
 
 
 

C++ 利用异常来确保资源释放  

2011-08-06 11:36:27|  分类: 编程语言(主要是 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
    C++ 一般会在构造函数里分配资源,在析构函数里释放资源。但当程序/函数不正常退出时,C++ 不能保证析构函数会被调用,这时,可以利用异常,在程序/函数需要退出时,扔出异常,在异常处理里退出程序/函数,这样可以使在函数调用堆栈上构造的对象正确析构。
    示例代码(摘自advanced linux programming 4.3.2 Thread Cleanup in C++):
#include <pthread.h>
class ThreadExitException
{
public:
    /* Create an exception-signaling thread exit with RETURN_VALUE. */
    ThreadExitException (void* return_value)
    : thread_return_value_ (return_value)
    {
    }
    /* Actually exit the thread, using the return value provided in the constructor. */
    void* DoThreadExit ()
    {
        pthread_exit (thread_return_value_);
    }
private:
    /* The return value that will be used when exiting the thread. */
    void* thread_return_value_;
};

void do_some_work ()
{
    while (1) {
        /* Do some useful things hereC++ 利用异常来确保资源释放 - HongMain - HongMain 的博客 */

        if (should_exit_thread_immediately ())
            throw ThreadExitException (/* thread’s return value = */ NULL);
    }
}

void* thread_function (void*)
{
    try {
        do_some_work ();
    }
    catch (ThreadExitException ex) {
        /* Some function indicated that we should exit the thread. */
        ex.DoThreadExit ();
    }
    return NULL;
}

  评论这张
 
阅读(48)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017