mawasiの備忘録

忘れやすい自分の為のプログラムやその他諸々に関するメモ

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 指定

unique_ptr はクラスの正確なサイズを知らないといけない?

19.Dx12デバイスの実装開始!