]>
Commit | Line | Data |
---|---|---|
15b6757b FM |
1 | ///////////////////////////////////////////////////////////////////////////// |
2 | // Name: exceptions | |
3 | // Purpose: topic overview | |
4 | // Author: wxWidgets team | |
5 | // RCS-ID: $Id$ | |
6 | // Licence: wxWindows license | |
7 | ///////////////////////////////////////////////////////////////////////////// | |
8 | ||
9 | /*! | |
10 | ||
11 | @page exceptions_overview C++ exceptions overview | |
12 | ||
13 | #Introduction | |
14 | @ref exceptionstrategies_overview | |
15 | #Technicalities | |
16 | ||
17 | ||
18 | @section exceptionintroduction Introduction | |
19 | ||
20 | wxWidgets had been started long before the exceptions were introduced in C++ so | |
21 | it is not very surprising that it is not built around using them as some more | |
22 | modern C++ libraries are. For instance, the library doesn't throw exceptions to | |
23 | signal about the errors. Moreover, up to (and including) the version 2.4 of | |
24 | wxWidgets, even using the exceptions in the user code was dangerous because the | |
25 | library code wasn't exception-safe and so an exception propagating through it | |
26 | could result in memory and/or resource leaks, and also not very convenient. | |
27 | Starting from the version 2.5.1 wxWidgets becomes more exception-friendly. It | |
28 | still doesn't use the exceptions by itself but it should be now safe to use the | |
29 | exceptions in the user code and the library tries to help you with this. Please | |
30 | note that making the library exception-safe is still work in progress. | |
31 | ||
32 | ||
33 | @section exceptionstrategies Strategies for exceptions handling | |
34 | ||
35 | There are several choice for using the exceptions in wxWidgets programs. First | |
36 | of all, you may not use them at all. As stated above, the library doesn't throw | |
37 | any exceptions by itself and so you don't have to worry about exceptions at all | |
38 | unless your own code throws them. This is, of course, the simplest solution but | |
39 | may be not the best one to deal with all possible errors. | |
40 | Another strategy is to use exceptions only to signal truly fatal errors. In | |
41 | this case you probably don't expect to recover from them and the default | |
42 | behaviour -- to simply terminate the program -- may be appropriate. If it is | |
43 | not, you may override #OnUnhandledException() | |
44 | in your wxApp-derived class to perform any clean up tasks. Note, however, that | |
45 | any information about the exact exception type is lost when this function is | |
46 | called, so if you need you should override #OnRun() and | |
47 | add a try/catch clause around the call of the base class version. This would | |
48 | allow you to catch any exceptions generated during the execution of the main | |
49 | event loop. To deal with the exceptions which may arise during the program | |
50 | startup and/or shutdown you should insert try/catch clauses in | |
51 | #OnInit() and/or #OnExit() as well. | |
52 | Finally, you may also want to continue running even when certain exceptions | |
53 | occur. If all of your exceptions may happen only in the event handlers of a | |
54 | single class (or only in the classes derived from it), you may centralize your | |
55 | exception handling code in #ProcessEvent | |
56 | method of this class. If this is impractical, you may also consider overriding | |
57 | the wxApp::HandleEvent() which allows you to handle | |
58 | all the exceptions thrown by any event handler. | |
59 | ||
60 | ||
61 | @section exceptionstechnicalities Technicalities | |
62 | ||
63 | To use any kind of exception support in the library you need to build it with | |
64 | @c wxUSE_EXCEPTIONS set to 1. This should be the case by default but | |
65 | if it isn't, you should edit the @c include/wx/msw/setup.h file under | |
66 | Windows or run @c configure with @c --enable-exceptions argument | |
67 | under Unix. | |
68 | On the other hand, if you do not plan to use exceptions, setting this | |
69 | flag to 0 or using @c --disable-exceptions could result in a leaner and | |
70 | slightly faster library. | |
71 | As for any other library feature, there is a #sample | |
72 | showing how to use it. Please look at its sources for further information. | |
73 | ||
74 | */ | |
75 | ||
76 |