RAII与错误处理的关系

RAII与异常处理的关系
RAII类的构造函数中在申请资源失败的时候,通常会抛出异常,那么如果在一个不支持异常的C++框架中,能用RAII吗?如果能用的话,又是怎么实现的呢?

还请达人们指导.

------解决方案--------------------
处理错误的方法很多, 在没有异常机制的C年代, 人们不是照样过得很好?

Window编程中不是经常使用两步创建过程, 第一步...; 第二步:真正创建资源, 并返回可能的
错误.

打开文件, 我先只传一个文件名到我的RAII类中, 再调用CreateFilePtr...., 并返回可能的错误. 在RAII类的释构函数中释放获得的文件(假如CreateFilePtr成功).
 
抛出异常只不过是RAII特性的一个方面.
------解决方案--------------------
楼主的意思是:如果在构造函数中资源获取失败,同时又不能抛出异常,那么将来使用时这个对象将是无效的。但你有不知道错误已经发生了,使用上会有问题。是这个意思吧?
如果这样,那么可以有两种解决办法:
1、使用标志或测试函数,表明该对象是否已经正确初始化了。
2、使用两阶段对象构造,首先创建对象,然后通过对象上的一个函数执行资源获取和初始化,这个函数可以返回出错信息。当然,这种情况下,最好也提供标志或测试函数。
ms的mfc就大量采用第2种方法。因为mfc诞生的时候,C++的标准还是遥远的事。此后很长一段时间,编译器(特别是ms自己的),都不能很好地支持异常。所以,mfc*采取这种方案。

其实,RAII的名称似乎有些误导。RAII关键不在资源获取上,也就是说,不一定要在构造函数中获取资源。标准中(包括TR1)的智能指针就是一例,它们只接受你new出来的指针。自己不做内存获取。RAII的关键在于类所持有的资源必须在结束生命期时通过析构函数正确释放。这才是RAII保证资源安全的关键。