真夜中のpImplトーク

という名の@SubaruG先生オンステージ
7
普通のC++使い、銀天すばる @SubaruG

@unarist もっと複雑な例のほうが恩恵が分かりやすいですが、テストということで失礼。生ポインタ版も作ってみて、どうしてそれだとダメなのか、ということも調べると楽しいですよ。

2010-04-04 23:11:51
普通のC++使い、銀天すばる @SubaruG

pimplに関する記事は、一回日記のネタにしたいにゃー。

2010-04-04 23:14:13
普通のC++使い、銀天すばる @SubaruG

簡単に言うと「Boost.ScopedPtrは要らない娘じゃないよ!」という記事。shared_ptrが優秀すぎるのは認めるけど、scoped_ptrも地味に優秀なんだってば。

2010-04-04 23:15:26
若年寄(もう若くない) @kikairoya

@SubaruG 私にはunique_ptrが居るのでscoped_ptrは要らない子ですごめんなさい

2010-04-04 23:16:51
普通のC++使い、銀天すばる @SubaruG

あと auto_ptr も困ったちゃんながら優秀だよね。まー unique_ptr さんが居ればauto_ptrもscoped_ptrも必要ないけど。

2010-04-04 23:18:11
隅須正昭 @nagoya313

auto_ptrはデストラクタがないクラス入れると警告が出ちゃうからな~

2010-04-04 23:19:22
若年寄(もう若くない) @kikairoya

@nagoya313 auto_ptr<T>のインスタンス化の時点でT::~T()の定義が見えてないと鼻から悪魔ではなかったっけ

2010-04-04 23:20:51
普通のC++使い、銀天すばる @SubaruG

エラーにして欲しいですよね。scoped_ptrみたいに。 RT @nagoya313: auto_ptrはデストラクタがないクラス入れると警告が出ちゃうからな~

2010-04-04 23:21:15
隅須正昭 @nagoya313

デストラクタ要らないクラスをpimplにするためだけにshared_ptr使ったのはいい思い出。

2010-04-04 23:22:57
普通のC++使い、銀天すばる @SubaruG

や、そういう問題じゃないですから。 RT @nagoya313: デストラクタ要らないクラスをpimplにするためだけにshared_ptr使ったのはいい思い出。

2010-04-04 23:24:29
うなりすと @unarist

@SubaruG む、pimpl使ったクラスを継承するってのはナシですか?

2010-04-04 23:25:07
普通のC++使い、銀天すばる @SubaruG

@unarist アリですよ。普通のクラスと同じですから。

2010-04-04 23:25:43
隅須正昭 @nagoya313

なんかそのためだけにboost入れるのめんどかったんだな。最近はunique_ptr使えて幸せ。

2010-04-04 23:25:48
うなりすと @unarist

@SubaruG じゃpimpl使ったクラスを継承して、さらにそこでも実装するときはまたpimpl?

2010-04-04 23:26:50
普通のC++使い、銀天すばる @SubaruG

pimplではデストラクタは絶対に必要だからにゃー。自分で定義するのが面倒なのでshared_ptrを使うのはオーバースペックすぎるし。

2010-04-04 23:29:31
普通のC++使い、銀天すばる @SubaruG

shared_ptrの破棄関数は実行時に決定されるからにゃー。

2010-04-04 23:30:28
若年寄(もう若くない) @kikairoya

unique_ptrってインスタンス化の時点でデストラクタの定義見えてないと駄目だっけ?

2010-04-04 23:30:39
普通のC++使い、銀天すばる @SubaruG

scoped_ptrはそうでしたが、unique_ptrは知らないです。明示的に削除子を変更してboost::checked_deleteを呼べば確実ですが。 RT @kikairoya: unique_ptrってインスタンス化の時点でデストラクタの定義見えてないと駄目だっけ?

2010-04-04 23:33:00
Egtra (ysk-noh) @egtra

@SubaruG scoped_ptrだとエラーになるというのはboost::checked_deleteのおかげかな?

2010-04-04 23:33:51
Egtra (ysk-noh) @egtra

「明示的に削除子を変更してboost::checked_delete」その手があったか!

2010-04-04 23:34:35
普通のC++使い、銀天すばる @SubaruG

@egtra ですー。incomplete なポインタをdeleteできてしまうC++の仕様がおかしいだけですが。

2010-04-04 23:35:55
普通のC++使い、銀天すばる @SubaruG

っていうか、今思ったけど、継承とpimplって物凄く相性悪いよね。 Pimpl側の実装関数に this を渡すくらいしか対処法ってない気がする。

2010-04-04 23:38:15