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

Assignment Help:

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.

 


Related Discussions:- But mfc appear to encourage the employ of catch-by-pointer;

Explain the for loop - computer programming, Explain the For Loop - Compute...

Explain the For Loop - Computer Programming? Similar to the while statement, for loop is an entry controlled loop and the code of the for loop will be executed itereatively. Th

Area, find area uder the curve y=f(x) between x=a and x=b   #incl...

find area uder the curve y=f(x) between x=a and x=b   #include float start_point, /* GLOBAL VARIABLES */ end_point, total_area; in

Create cpp code for identify objects and their relationships, You are setti...

You are setting up an information system for a DVD Rental Company called Box office. The new system need to hold information about customers and DVDs rentals, payments and fines. C

Write a program that simulates a simple calculation, The program reads two ...

The program reads two numbers and a character (operator). If the character is "+" then sum is displayed. If it is "-"then difference is displayed. If it is "*" then product is disp

Differences between a pointer and a reference, Differences between a pointe...

Differences between a pointer and a reference 1.  A reference must always point to some object where as this restriction is not imposed on a pointer. e.g. int *pi = 0;

Program of 2d byte array dynamicall, In this lab, please complete a given p...

In this lab, please complete a given program to perform the following tasks: 1. Allocate a 10 by 5 2D byte array dynamically. The way of allocation must be consistent with page

Explain difference between early binding and late binding, What is the diff...

What is the difference between early binding and late binding? What are advantages of early binding? a.) Late binding refers to function calls which aren't resolved until run t

Title, #questionAt a shop of marbles, packs of marbles are prepared. Packet...

#questionAt a shop of marbles, packs of marbles are prepared. Packets are named A, B, C, D, E …….. All packets are kept in a VERTICAL SHELF in random order. Any numbers of packets

Program to print a series, Write a program called Series that will print/di...

Write a program called Series that will print/display a series of numbers starting with 1 and ending with the last number that is less than 30. The series should include only odd n

# Bank Account class, Write a C++ program to test the Bank Account class fo...

Write a C++ program to test the Bank Account class for 10 customers.

Write Your Message!

Captcha
Free Assignment Quote

Assured A++ Grade

Get guaranteed satisfaction & time on delivery in every assignment order you paid with us! We ensure premium quality solution document along with free turntin report!

All rights reserved! Copyrights ©2019-2020 ExpertsMind IT Educational Pvt Ltd