こんなにコピーコンストラクタ呼ばれるとは思わなかった

#include <iostream>
#include <algorithm>
using namespace std;

class CTest
{
    int i;

public:
    bool operator()(const int &a1, const int &a2) const {
        cout << "比較" << i << endl;
        return a1 < a2;
    }
    CTest(const CTest &o){
        i = o.i + 1;
        cout << "コピーコンストラクタ" << i << endl;
    }
    CTest(){
        i = 0;
        cout << "コンストラクタ" << i << endl;
    }
    ~CTest(){
        cout << "デストラクタ" << i << endl;
    }
};

int main()
{
    int u[3] = {1, 2, 0};
    CTest o;
    sort(u, u + 3, o);
    cout << u[0] << u[1] << u[2] << endl;
    return 0;
}

/* 結果(Visual C++ 2010 Releaseビルド)
コンストラクタ0
コピーコンストラクタ1
コピーコンストラクタ2
コピーコンストラクタ3
コピーコンストラクタ4
比較4
比較4
比較4
デストラクタ4
デストラクタ3
デストラクタ2
デストラクタ1
012
デストラクタ0
*/