@unarist もっと複雑な例のほうが恩恵が分かりやすいですが、テストということで失礼。生ポインタ版も作ってみて、どうしてそれだとダメなのか、ということも調べると楽しいですよ。
2010-04-04 23:11:51簡単に言うと「Boost.ScopedPtrは要らない娘じゃないよ!」という記事。shared_ptrが優秀すぎるのは認めるけど、scoped_ptrも地味に優秀なんだってば。
2010-04-04 23:15:26あと auto_ptr も困ったちゃんながら優秀だよね。まー unique_ptr さんが居ればauto_ptrもscoped_ptrも必要ないけど。
2010-04-04 23:18:11@nagoya313 auto_ptr<T>のインスタンス化の時点でT::~T()の定義が見えてないと鼻から悪魔ではなかったっけ
2010-04-04 23:20:51エラーにして欲しいですよね。scoped_ptrみたいに。 RT @nagoya313: auto_ptrはデストラクタがないクラス入れると警告が出ちゃうからな~
2010-04-04 23:21:15や、そういう問題じゃないですから。 RT @nagoya313: デストラクタ要らないクラスをpimplにするためだけにshared_ptr使ったのはいい思い出。
2010-04-04 23:24:29pimplではデストラクタは絶対に必要だからにゃー。自分で定義するのが面倒なのでshared_ptrを使うのはオーバースペックすぎるし。
2010-04-04 23:29:31scoped_ptrはそうでしたが、unique_ptrは知らないです。明示的に削除子を変更してboost::checked_deleteを呼べば確実ですが。 RT @kikairoya: unique_ptrってインスタンス化の時点でデストラクタの定義見えてないと駄目だっけ?
2010-04-04 23:33:00@SubaruG scoped_ptrだとエラーになるというのはboost::checked_deleteのおかげかな?
2010-04-04 23:33:51@egtra ですー。incomplete なポインタをdeleteできてしまうC++の仕様がおかしいだけですが。
2010-04-04 23:35:55っていうか、今思ったけど、継承とpimplって物凄く相性悪いよね。 Pimpl側の実装関数に this を渡すくらいしか対処法ってない気がする。
2010-04-04 23:38:15