unique_ptrについての覚書
今更ながらスマートポインタの勉強をしていて、unique_ptrで少しハマったので覚書を残しておきます。
クラス内にunique_ptrをメンバに持っている場合、クラスのコンストラクタやデストラクタでunique_ptrメンバの解析?を行うようで(デストラクタではunique_ptrメンバのデストラクタを呼ぼうとする)、unique_ptrにしたメンバの定義が見えるところでデストラクタ、コンストラクタを定義しなければコンパイルエラーになってしまうようです。
なので、unique_ptrをメンバに持つクラスのデストラクタ、コンストラクタは以下のように書く必要があります。
以下、実際に動かして確認できるようにしたコードです。
https://wandbox.org/permlink/1PNI4EIxZNwLin9G
B.h内でA.hもインクルードしてしまえばそれでも解決できますが、小規模なテストコードとかでない限りは分けると思いますし、pimplイディオムとか使用する場合はほぼこういう形になるのではと思います。
参考
・C++11:pimplイディオムにおけるデストラクタの default 指定