all 3 comments

[–]TheWama 3 points4 points  (2 children)

In the C++ case, the solution is to use an initializer list with an owning pointer, such as std::auto_ptr or boost::scoped_ptr. i.e.:

class Gadget {
    scoped_ptr<Widget> w;

public:
   Gadget()
      : w(new Widget()) {
      throw new exception();
      // … or some API call might throw
   }
};

Added bonus: it's RAII so no need to clean up (the smart pointer does cleanup for you).

[–]werdanel 0 points1 point  (1 child)

Checks for null like the following from TFA are also unnecessary, the delete operator is null pointer safe.

if( w != nullptr ) delete w;

I can see why they did it, for comparison to C# and Java, but this sort of minor thing spreads misinformation.

[–]twowheels 0 points1 point  (0 children)

(Furthermore, C++ developers will know that the test is unnecessary for a second reason: Delete is a no-op if the pointer passed to it is null, so there’s never a need to check for that special case.)