ゆとりーなの日記

日記的な事を書いて行くと思はれる

新しい女性に行くんですかと訊かれたが当然こう答えました。「これからはC++一筋です」

私の周りの知人には私のアンチ女性的な態度を支持してくれている人も多いのでこの路線で行きます。むしろ今迄黙って人間の女性に心がムーブされていたことをお詫びしないといけないと思っている次第です。
最近気になったことに、ムーブコンストラクタが暗黙で定義されるのかということがあるので試してみました。規格読むのが良いのは分かっているものの、やっぱり英語は読めないんです。

class Hoge {
 public:
    explicit Hoge(int size) : ptr_(new int[size]), size_(size) {
        std::cout << "コンストラクト" << std::endl;
    }
    ~Hoge() {
        delete[] ptr_;
        std::cout << "デストラクト" << std::endl;
    }
 private:
    Hoge(const Hoge &rhs);
    int *ptr_;
    int size_;
};

Hoge initHoge1() {
    Hoge hoge(10);
    return hoge;
}

ムーブコンストラクタが暗黙のうちに定義されるのであれば、上のコードは通ります。ところがVC++2010では案の定コンパイルエラーになったので暗黙のうちに定義されないということで良さそうです。これによりuncopyableクラスとかを作ろうとした時に、0x対応と非対応で分岐する必要はなさそうな感じがします。