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のような使い方はできません。このような参照で受けられないし、コピーするのもなあ、というときのためにポインタを使っているのです。