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! ]