The link http://gotw.ca/gotw/066.htm states that
Moral #1: Constructor function-try-block handlers have only one purpose -- to translate an exception. (And maybe to do logging or some other side effects.) They are not useful for any other purpose.
While http://www.parashift.com/c++-faq-lite/exceptions.html#faq-17.8
If a constructor throws an exception, the object's destructor is not run. If your object has already done something that needs to be undone (such as allocating some memory, opening a file, or locking a semaphore), this "stuff that needs to be undone" must be remembered by a data member inside the object.
Are these 2 statements not contradictory? The first one kind of implies that the try catch within a constructor is pretty much useless while the second says that it is needed to free resources. What am i missing here?
No. The second one basically means if the constructor throws an exception which comes out of it (i.e the constructor), then the destructor doesn't get called. And the first one means that function-try-block doesn't let the exception come out of the constructor. It catches it inside the constructor itself, and handles it right there.