最后在C
发布时间:2020-12-16 03:12:24 所属栏目:百科 来源:网络整理
导读:这是在标准C中实现类似终极的行为的好方法吗? (无特殊指针) class Exception : public Exception { public: virtual bool isException() { return true; } };class NoException : public Exception { public: bool isException() { return false; } };Objec
这是在标准C中实现类似终极的行为的好方法吗?
(无特殊指针) class Exception : public Exception { public: virtual bool isException() { return true; } }; class NoException : public Exception { public: bool isException() { return false; } }; Object *myObject = 0; try { // OBJECT CREATION AND PROCESSING try { myObject = new Object(); // Do something with myObject. } // EXCEPTION HANDLING catch (Exception &e) { // When there is an excepion,handle or throw,// else NoException will be thrown. } throw NoException(); } // CLEAN UP catch (Exception &e) { delete myObject; if (e.isException()) throw e; } >对象没有抛出异常 – > NoException – >对象清理 解决方法
标准答案是使用
resource-allocation-is-initialization缩写RAII的一些变体.基本上,您构造一个变量,该变量与finally之前的块内的块具有相同的作用域,然后在对象析构函数中的finally块中进行工作.
try { // Some work } finally { // Cleanup code } 变 class Cleanup { public: ~Cleanup() { // Cleanup code } } Cleanup cleanupObj; // Some work. 这看起来非常不方便,但通常会有一个预先存在的对象,为您做清理.在你的情况下,看起来你想要破坏finally块中的对象,这意味着一个智能或自动指针将会做你想要的: std::auto_ptr<Object> obj(new Object()); 无论抛出什么异常,对象将被破坏.回到RAII,在这种情况下,资源分配是为Object分配内存并构造它,初始化是auto_ptr的初始化. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |