Destructor não invocado quando uma exceção é lançada no construtor

Por que o destruidor não é chamado neste código?

#include <boost/scoped_ptr.hpp>
#include <iostream>

class MyClass {
boost::scoped_ptr<int> ptr;
public:
MyClass() : ptr(new int) { *ptr = 0; throw; std::cout<<"MyClass Allocated\n"; }
~MyClass() { std::cout<<"MyClass De-allocated\n"; }
int increment() { return ++*ptr; }
};

int main()
{
    boost::scoped_ptr<MyClass> myinst(new MyClass);
    std::cout << myinst->increment() << '\n';
    std::cout << myinst->increment() << '\n';
}

EDITA

Das respostas, entendo que quando uma exceção acontece no construtor, o destruidor não será chamado. Mas se a exceção ocorrer no main (), ou seja, depois que o objeto MyClass for totalmente instanciado, o destruidor MyClass será chamado? Caso contrário, por que é um ponteiro inteligente?

Adicionando o código

#include <boost/scoped_ptr.hpp>
#include <iostream>

class MyClass {
    boost::scoped_ptr<int> ptr;
    public:
    MyClass() : ptr(new int) { *ptr = 0; std::cout<<"MyClass Allocated\n"; }
    ~MyClass() { std::cout<<"MyClass De-allocated\n"; }
    int increment() { return ++*ptr; }
};

int main()
{
    boost::scoped_ptr<MyClass> myinst(new MyClass);
    throw 3;
    std::cout << myinst->increment() << '\n';
    std::cout << myinst->increment() << '\n';
}

Resultado

MyClass Allocated
terminate called after throwing an instance of 'int'
Aborted

questionAnswers(10)

yourAnswerToTheQuestion