Re: New failing in constructor
In article
<4b60b625-2b96-44ec-8c0a-ea8043c17b7a@a18g2000yqc.googlegroups.com>,
MC <manan.chopra@gmail.com> wrote:
Say I have the following classes
class A{};
class B{};
class C{};
class X{
A* a;
B* b;
C* c;
public:
X() : a(new A), b(new B), c(new C) {}
};
Say now new fails while initializing C. Since X is not constructed
completely it will not call its destructor and we will have a and b
never destructed and hence a memory leak.
What is the best way to avoid this problem.
Store them in a smart pointer, such as std::auto_ptr, as in:
class X {
std::auto_ptr<A> a;
std::auto_ptr<B> b;
std::auto_ptr<C> c;
public:
X() : a(new A), b(new B), c(new C) {}
};
Some other candidates are tr1::unique_ptr, boost::scoped_ptr and
boost::shared_ptr, depending on what ownership semantics you want.
Should I never use new in the constructor?
Using new is fine (assuming you have good reason not to store them by
value, such as polymorphism, lifetime issues, size issues, etc.); the
result should be stored in something that manages the lifetime of the
object, and not just a raw pointer.
--
Nevin ":-)" Liber <mailto:nevin@eviloverlord.com> 773 961-1620
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]