unique_ptr

unique_ptrの使い方を勉強してみました。

#include <iostream>
#include <memory>

class C {
    int     n;

public:
    C(int m) : n(m) { }
    ~C() { std::cerr << "C:~C" << std::endl; }
    int get() const { return n; }
};

int main() {
    auto    p = std::unique_ptr<C>(new C(1));
    std::cout << p->get() << std::endl;
}

ちゃんと動くようです。

1
C:~C

しかし、

int main() {
    auto    p = std::unique_ptr<C>(new C(1));
    auto    q = p;
    std::cout << q->get() << std::endl;
}

とするとリンクエラーが出ます。
参照で受けないといけないんですね。

    auto&   q = p;

これならうまく動きます。
しかし、前回のpermutionsのような使い方はできません。このような参照で受けられないし、コピーするのもなあ、というときのためにポインタを使っているのです。