シングルトンまとめ

C++のシングルトン関係の、さんざん既出な考察とか。
C++
8
普通のC++使い、銀天すばる @SubaruG

シングルトンの get で取得したポインタを外部でdeleteする方が悪いと思うの。 http://d.hatena.ne.jp/pknight/20100423/1272013131

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

一応 unique_ptr を使えば解決出来るけど、そこまでして頑張る必要性も感じないにゃー。

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

singleton は shared_ptr を使うべきか否か。…うん、冗長だねー。リークしない保証は素敵だけど。

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

shared_ptr は絶対に Dangling が起きない。

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

マルチスレッドの場合はそうでもないけど、シングルスレッドなら絶対にだ。

2010-04-23 22:46:34
相沢陽菜 @fetus_hina

@SubaruG プロセス実行中一発しかつくらなくて、プログラム中明示的に解放しないのはリークではないねー。

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

@fetus_hina 用語的にはリークでないのかもしれませんが、デストラクタが呼ばれないのは勘弁です><

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

インスタンス取得で生参照ではなく shared_ptr を返すようにすれば、少なくとも解放順序による Dangling の問題は発生しない。

2010-04-23 22:51:29
相沢陽菜 @fetus_hina

@SubaruG 解放するためだけにstatic なauto_ptrをgetInstance()に作ったりした。悲しい。

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

ただし相互依存による解放漏れが起こる可能性は極めて高くなるから、どっちもどっちだけど。 そういう場合は weak_ptr を使うべきかにゃ。

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

@fetus_hina それやったら解放順序で Dangling して落ちました。

2010-04-23 22:53:19
相沢陽菜 @fetus_hina

@SubaruG 後始末が複雑だとそうか、あり得るか

2010-04-23 22:54:37
隅須正昭 @nagoya313

とりあえず今はシングルトントークがなされてるのかな?

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

@fetus_hina Modern C++ Design でも一章丸々使って解説してる面倒な問題です…。

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

とりあえず生ポインタを返すインスタンス取得関数はクソだと思うんだ。

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

生ポインタってのは意図が明確でない。

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

僕みたいな人間は、生ポインタが帰ってきたら、そいつは資源を所有して「ない」と判断するけど、そう判断しない人もいる。

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

所有してないなら参照で、所有してるならスマポで、それぞれ返そうぜ。

2010-04-23 23:00:07
隅須正昭 @nagoya313

生ポインタが帰ってくる場合はスマポに入れて使ってほしいと勝手に解釈します。

2010-04-23 23:01:03
隅須正昭 @nagoya313

生ポインタ返しの方が入れるスマポが選べる分良い気もする。

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

(auto|unique)_ptr に入れて release すればいい。 RT @nagoya313: 生ポインタ返しの方が入れるスマポが選べる分良い気もする。

2010-04-23 23:03:45