exception-handling专题提供exception-handling的最新资讯内容,帮你更好的了解exception-handling。
我知道如果在构造函数中抛出异常,析构函数将不会被调用(简单类,不继承).因此,如果在构造函数中抛出异常,并且有一些堆内存未被清除的机会.那么这里最好的做法是什么?让我们假设我必须在构造函数中调用一些函数,它可能会抛出异常.在这种情况下,我总是使用共享指针吗?有什么办法谢谢! 我会坚持 RAII成语. 如果您避免“裸”资源(如运算符新,裸指针,裸互斥体等),并将所有内容都包含在具有适当RAII行为的
C标准提供了std :: set_terminate函数,它可以指定什么函数std :: terminate应该实际调用. std :: terminate只能在可怕的情况下被调用,并且当标准描述的时候,它被称为是可怕的(例如一个未捕获的异常).当std :: terminate确实被调用时,这种情况似乎是不符合内存的 – 你没有太多的理由可以做到这一点. 我已经看到它可以用来确保资源被释放 –
在“More Effective C(Number 15)”一书中,我发现如果启用了异常,那么即使没有使用异常,代码也会变得更慢.在我看来,例外是有限的使用,我试图避免它们,但这是另一个话题. 我不完全明白他的说法: >启用/禁用异常是什么意思?它有零或多于零的try / catch块的区别?它是编译器标志吗?如果我使用可以发生异常的DLL,会发生什么? >假设没有抛出异常: >代码整体变慢,还是
考虑下面的 Cocoa / Obj-C代码片段: MyClass *obj; @try { [obj doSomething]; } @catch (NSException * e) { NSLog(@"Exception occurred: %@", [e description]); } @finally { [obj cleanUp]; } 和 MyClass *ob
考虑以下C程序 struct str { int mem; str() try :mem(0) { throw 0; } catch(...) { } }; int main() { str inst; } 捕获块工作,即
我继续读这个swap()操作,像这样: template<class T> void swap (T &a, T &b) { T temp (a); a = b; b = temp; } 当我们处理异常安全时,是有问题的. 这是怎么了? 此外,我们如何解决呢? 在一般实现中,假设T的任何操作都可以抛出,您不能提供强大的异常保证,这意味着在异常事件发生之前将状态与操作之前完全一致.即使T
两相结构具有以下形状: struct something { something () : p1(NULL) , p2(NULL) { } ~something () { if (p1) delete p1; if (p2) delete p2; } void initialize () {
我的假设是packaged_task在下面有一个承诺.如果我的任务抛出异常,我该如何将其路由到相关的未来?只有一个承诺我可以调用set_exception   – 我如何为packaged_task做同样的事情? std :: packaged_task有一个关联的std :: future对象,它将保存异常(或任务的结果).您可以通过调用std :: packaged_task的 get_fut
你知道一种在Delphi代码中捕获,记录和重新引发异常的方法吗? 一个简单的例子: procedure TForm3.Button1Click(Sender: TObject); begin try raise Exception.Create('Bum'); except on E: Exception do begin MyHandleExcepti
在Delphi中,你怎么用try,finally,catch?一个Java / C#等效的东西看起来像: try { // Open DB connection, start transaction } catch (Exception e) { // Roll back DB transaction } finally { // Close DB connection,
我知道如何在delphi中捕获异常(try..except / finally和e.message)但我想知道是否存在可以引发异常的异常处理机制以及引发它的例程的名称.通过例子 procedure/function bla();//this can be in a unit/class begin code.... an error is raised here -> inside or n
这是 try DoSomethingThatMightThrowAnException; except on E : ESyntaxError do begin if (E.ErrorCode = errMissingBracket) then HandleError else raise; end; end; 比这慢吗? try
我试图设置SEH而不使用try除外 (这是为了我个人的知识,更好地了解SEH如何工作) 以下代码不起作用 type TSeh = packed record OldSeh:DWORD; NewSeh:DWORD; end; procedure test; begin WriteLn('Hello from seh'); end; var eu:TSe
从finally块中,是否有可能告诉异常已被提出? 您可以检查是否已分配ExceptObject或ExceptAddr. 在VCL来源中,这是为了考试.在GIFImg.pas或jpeg.pas中. 应输出以下代码 ExceptObject<>零 ExceptObject = nil 如果你删除了例外当然 ExceptObject = nil ExceptObject = nil try t
我正在调试一个delphi程序. except on e: TErrorTapeDrive do if e.errorCode = 1104 then if Assigned(indexDoneEvent) then indexDoneEvent; // other handling... //
有一个例子说明了我的问题: procedure Test; begin try ShowMessage('1'); raise EWarning.Create(12345, 'Warning: something is happens!'); ShowMessage('2'); except on E: EWarning do if IWantT
几天来,我一直在用异常面具努力(但徒劳无功). 我开发了一个应用程序,可以对数十万条记录进行大量浮点计算.显然,代码必须能够处理异常,尤其是与浮点计算相关的异常:溢出,ZeroDivide等. 应用程序在具有许多不同类型处理器的Windows 7(32位或64位)下正确运行,如果发生错误,则正确处理条件,引发异常并丢弃记录. 不幸的是,当我启动应用程序时,问题就出现了:在具有Intel Xeon
通常我会执行以下操作将字符串值保存到数据库中 DataModule.tbTableNumber.Value := StrToFloat(edtNumber.text); 现在问题出现在用户输入无法转换为数字的内容时.我怎么能阻止这个?一个人可以使用异常吗?我将如何编写此异常? 我正在使用Delphi XE2. 最好的解决方案(恕我直言)是使用TryStrToFloat: procedure TFo
在Delphi 5中,我目前编写的代码在finally块中的多个变量上调用Free,例如: ... finally a.Free; b.Free; c.Free; end; 此代码假定Free永远不会引发,因为例如,如果a.Free引发,则b和c的内存将被泄露.这个假设是否合理? Free方法本身没有显式引发异常,但它调用了虚拟析构函数Destroy,这肯定会引发异常. 因
仅供我澄清: 我可以在.NET Framework中同时抛出CLS-Complaint和非CLS投诉异常吗?我正在使用C#3.0. 当我抓住异常 catch(Exception ex) { } >它只能捕获CLS-Complaint例外吗? > RuntimeWrappedException类的用途是什么(我可以举一个简单的例子吗?). >是的,您可以在.NET Framework中抛出非CLS