月別アーカイブ: 2015年6月

響け! ユーフォニアム面白い

放映アニメが入れ替わる毎に、最初に期待してたアニメと段々ハマって楽しみに見るアニメとが全然違うんだけど今期面白く見てるアニメはユーフォ。これは良い花田。
人の想いはままならなくて、面倒臭くて、だからこそ面白いなあ

shared_ptrで派生クラスを保持した時のデストラクタの挙動

C++で派生クラスのオブジェクトを親クラスのポインタで保持している場合、派生クラスのデストラクタが呼ばれるためには親クラスのデストラクタを仮想関数化しなければならない。

ところで今はもう2015年。C++11もすっかり市民権を得、C++14もやってきて、生ポインタを扱ったり直接delete書いたりするのは時代遅れとなりました。
そして、 shared_ptr を使うとどうやらデストラクタを仮想関数化しなくても良いっぽいというハナシを聞いたので試してみた。

素晴らしい。

ただしどうやら格納されたオブジェクトの型のデストラクタではなく、「shared_ptrにセットした時の型」のデストラクタが呼ばれるっぽい。

まーこんな書き方はフツーしないけど、shared_ptrを使えばデストラクタの仮想関数化は全く不要!! と安易に考えると落とし穴があるかもしれない。かもしれない。

もひとつ紛らわしいのは unique_ptr は単純に従来通りのデストラクタが呼ばれるのよな。

というわけで B のオブジェクトがdeleteされる時にBのデストラクタが呼ばれることを確実に保証するためにはshared_ptrに頼るのではなく親クラスのデストラクタを仮想関数化するしかないよなー。みたいな。そんな。