Re: Exceptions & Constructors
Erik Wikstr?m wrote in message...
On 2007-07-30 13:15, jalqadir@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
}
}
Re-worked for 'function-level try block' (just for an idea(OP)):
#include <stdexcept> // #include <exception>
#include <new> // bad_alloc
class Foo{
int *ptrarr[16];
public:
bool correct;
Foo() try : correct( true ) {
// yup, I found yer lost colon. <G>
// ( It was hangin' with a bad crowd at the Bar(). )
for (size_t i = 0; i < 16; ++i) ptrarr[i] = new int();
} catch( std::bad_alloc&){
correct = false;
// delete what you new.
// throw;
} // catch
}; // class Foo
// or, the extreme: (not borland6)
#include <iostream> // #include <ostream>
#include <stdexcept>
#include <new> // bad_alloc
int main() try {
Foo f; // un-comment "throw;" in Foo's "catch()"
// throw "failure in main()"; // to test
} // main() end
catch( char const *msg) {
std::cout << msg << std::endl;
return 1;
}
catch( std::bad_alloc&){
std::cout <<" Opps, failed to allocate!"<<std::endl;
// throw;
return 1;
} // catch
catch( ... ){
std::cout <<" Unknown failure!"<<std::endl;
return 1;
} // catch
Erik, I started to toss out this post[1], but, seeing other posts, it may
help somebody.
[1] - I only wanted to inform you I found your lost colon. :-}
Was that an "colon-oscopy"(sp?)?
[ corrections, comments welcome. ]
--
Bob R
POVrookie