Re: Exceptions & Constructors
On 2007-07-30 15:09, Roy wrote:
On Jul 30, 5:52 pm, Erik Wikstr?m <Erik-wikst...@telia.com> wrote:
On 2007-07-30 14:24, Gianni Mariani wrote:
Erik Wikstr?m wrote:
On 2007-07-30 13:15, jalqa...@gmail.com wrote:
The constructor in MyClass instantiates many objects pointers through
'new', I would like to implement a way to make sure that the object
has been allocated in memory by catch(ing) the bad_alloc exception
error, but this means that I have to throw this error back from
MyClass constructor, how can I avoid this?
Sure, add a flag to the class that tells if the object was constructed
correctly:
class Foo {
int* ptrarr[16];
public:
bool correct;
Foo() correct(true) {
try {
for (size_t i = 0; i < 16; ++i)
ptrarr[i] = new int();
} catch(bad_alloc&) {
correct = false;
}
}
};
int main() {
Foo f;
if (f.correct == false) {
// Opps, failed to allocate
}
}
That code leaks if it fails. Should you not have to delete all of them
or at lease assign a null pointer ?
Actually it does not even compile, I forgot the : in the initialisation
list and have not included the headers for bad_alloc etc. It was more to
show the OP the general idea then to give him/her code that worked, as
an example I don't expect that the OP has an array of pointers but
rather a number of pointers, which should then be initialised to null in
the initialisation list before allocating memory with new. Or perhaps
using some kind of smart pointer.
--
Erik Wikstr?m
the lost : in the initialization list had me confused ! :-( , thanks
for clearing this up !
What you have suggested is an elegant way of handling an exception ,
what else is bool used for ?
For storing anything that can only have two different values. It is not
uncommon to get into a situation where you want to check something, and
the answer can then either be true or false, such as is a container
empty? Does the container contain a specific element? In all those cases
bool is a suitable return type.
It is also used to check conditions in loops and control-statements, the
==, !=, <, >, <=, and >= operators (along with some I probably forgot)
all return a value of type bool (or something convertible to bool). As
an example a while-loop loops as long as the condition is true, so an
infinite loop can be written like this:
while (true)
{
// ...
}
--
Erik Wikstr?m