Деструктор не вызывается при возникновении исключения в конструкторе

Почему деструктор не вызывается в этом коде?

#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';
}

РЕДАКТИРОВАТЬ

Из ответов In понимают, что когда в конструкторе происходит исключение, деструктор вызываться не будет. Но если исключение происходит в main (), т.е. после того, как объект MyClass будет полностью создан, будет ли вызван деструктор MyClass? Если нет, то почему это умный указатель?

Добавление кода

#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';
}

Выход:

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

Ответы на вопрос(5)

Ваш ответ на вопрос