But mfc appear to encourage the employ of catch-by-pointer;, C/C++ Programming

Q: But MFC appear to encourage the employ of catch-by-pointer; should I do the similar?

A: Depends. If you're utilizing MFC and catching one of their exceptions, by all means, do it their way. Similar goes for any framework: while in Rome, do as the Romans. Don't attempt to enforce a framework into your way of thinking, even if "your" way of thinking is "better." If you decide to employ a framework, embrace its way of thinking employ the idioms that its authors expected you to use.

But if you're developing your own framework and/or a piece of the system which does not directly based on MFC, then don't catch by pointer only because MFC does it that way. While you're not in Rome, you don't essentially do as the Romans. In this case, you must not. Libraries such as MFC predated the standardization of exception handling in the C++ language, and some libraries employ a backwards-compatible form of exception handling which requires (or at least encourages) you to catch by pointer.

The difficulty with catching by pointer is that it's not clear who (if anyone) is responsible for deleting the pointed-to object. For instance, consider the following:

MyException x;

void f()                                                                                  

{

MyException y;

try {                                                                                                                                              

switch (rand() % 3) {

case 0: throw new MyException;

case 1: throw &x;

case 2: throw &y;

}

}

catch (MyException* p) {

...  should we delete p here or not???!?

}

}

There are three basic problems here:

 

It might be tough to decide whether to delete p in the catch clause. For instance, if object x is inaccessible to the scope of the catch clause, as while it's buried in the private part of some class or is static in some other compilation unit, it may be tough to figure out what to do.

If you solve out the primary problem by constantly using new in the throw (and thus consistently by delete in the catch), then exceptions always employ the heap that can cause problems while the exception was thrown since the system was running low on memory.

If you solve out the first problem by constantly not using new in the throw (and thus consistently not using delete in the catch), then you probably won't be capable to allocate your exception objects as locals (as then they might get destructed too early), wherein case you'll ought to worry about thread-safety, semaphores, locks etc. (intrinsically static objects are not thread-safe).

It isn't to say it's not possible to work through these issues. The point is this: if you catch by reference instead of by pointer, life is easier. Why make life tough when you don't have to?

The moral: ignore throwing pointer expressions, and ignore catching by pointer, unless you're using an existing library that "wants" you to do so.

 

Posted Date: 3/19/2013 8:54:04 AM | Location : United States







Related Discussions:- But mfc appear to encourage the employ of catch-by-pointer;, Assignment Help, Ask Question on But mfc appear to encourage the employ of catch-by-pointer;, Get Answer, Expert's Help, But mfc appear to encourage the employ of catch-by-pointer; Discussions

Write discussion on But mfc appear to encourage the employ of catch-by-pointer;
Your posts are moderated
Related Questions
#include stdio.h> #include conio.h> #include string.h> void main() {           int i=0,j=0,k=0,l=0;           int a[3][3],temp[3][3];           clrscr();

Ask question # Byteland county is very famous for luminous jewels. Luminous jewels are used in making beautiful necklaces. A necklace consists of various luminous jewels of particu

write a queue program in c langauge?

Write a program to find the area under the curve y = f(x) between x = a and x = b, integrate y = f(x) between the limits of a and b. The area under a curve between two points can b

Webcam Driver static library or DLL required for Windows I want a .dll or .lib file using which i will take a snapshot from the webcam and it can't turn on the webcam LED while

write a c program chat illustrates the creation of child process using fork system call. One process finds sum of even series and other process finds sum of odd series.

First line starts with T, number of test cases. Each test case T contains a necklace (N).

Program is to find the area of room: Program is to find the area of room with default values using classes & object class room   {   private:     int len;     i

Project Description: Not just like that though. I want a similar program that can scan through poker lobbys (pokerstars, full tilt, ongame and ipoker) and seat me to the left of

Write a program to find the area under the curve y = f(x) between x = a and x = b, integrate y = f(x) between the limits of a and b. The area under a curve between two points can b