インスタンスを関数の戻り値にしたい

#include 
using namespace std;

class A {
public:
    A() {
        cout << "A::A()" << endl;
    }
    virtual ~A() {
        cout << "A::~A()" << endl;
    }
};

A foo() {
    cout << "b" << endl;
    A a;
    cout << "c" << endl;
    return a;
}

void main() {
    cout << "a" << endl;
    A a = foo();
    cout << "d" << endl;
}

の実行結果は

a
b
A::A()
c
A::~A()
d
A::~A()

なぜデストラクターの呼び出し数が2回でコンスタクターの呼び出し数が1回なのか?
... http://wisdom.sakura.ne.jp/programming/cpp/cpp12.html に分かりやすい説明があった。関数へ引数を渡す時や、関数から戻り値を返すときは、インスタンスのコピーは作られるが、コンストラクターは呼ばれないという決まりらしい。もっとも、デストラクターはこれにかかわらず呼ばれる。