- 1 名前:デフォルトの名無しさん [2022/02/19(土) 11:56:42.14 ID:kSnJ/KwP.net]
- 前スレ
C++相談室 part158 https://mevius.5ch.net/test/read.cgi/tech/1636969758/
- 992 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 08:28:49 ID:79II+WyL.net]
- 別にシングルトンじゃなくても単に起動時に初期化して渡せばええやん
- 993 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 09:59:18.13 ID:wwxSZsaE.net]
- いや要るでしょシングルトン
何らかのリソースマネージャ作るときとか避けて通れないし
- 994 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 10:35:30.42 ID:dlHUY+WK.net]
- >>977
初期化順序の問題って回避できたっけ?
- 995 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 10:40:07.14 ID:79II+WyL.net]
- mainでリソース用意しろという話よ
ライブラリだったら初期化用になんか叩いてもらえ
- 996 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 10:47:06 ID:rsrkTEkU.net]
- グローバル変数をポインタにしておいてmainでnewとか
friend int main(int, char**); とか?
- 997 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 10:56:36 ID:79II+WyL.net]
- なんでグローバル変数にこだわるんだよ
- 998 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 10:58:53 ID:dlHUY+WK.net]
- >>980
シングルトンより制限多くてメリット感じないなぁ。 マキャベリスト対策は難しいかもしれないけど、マーフィーに呪われないように運用で回避するのは最後の手段にすべき。
- 999 名前:デフォルトの名無しさん mailto:sage [2022/04/14(木) 15:09:30.09 ID:4tVKG4Xu.net]
- 1個でもグローバルなりがあると
エントリポイントの main よりも前に走るコンストラクタ内部であれこれされる可能性を想定する必要に迫られる と
- 1000 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 00:01:53.91 ID:he9C7sX7.net]
- >>981
> グローバル変数をポインタにしておいてmainでnewとか > friend int main(int, char**); とか? それは最初にやったがブ
- 1001 名前:ツがOSのwrapperなのでカッコワルダサいと思い考え直した
結果がマルチスレッド対応を含まないライトなシングルトンの適用 >>980 main()に入ってから初期化するというだけでは初期化が間に合わないケースがあるから何とかしたいという話 [] - [ここ壊れてます]
- 1002 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 00:06:58.93 ID:xDiQzMrD.net]
- mainの実行より前に意味があることしようと思ったらコンパイル時しかなかろうよ
- 1003 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 00:13:00.39 ID:he9C7sX7.net]
- >>986の主観の話をしているのではない件について:
- 1004 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 00:22:10.66 ID:xDiQzMrD.net]
- >>987
お前のグローバル変数愛は主観じゃないんかいな もっと崇高な何かがあるのか
- 1005 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 04:08:04.71 ID:sm6VHVYM.net]
- 静的ストレージは実装と心中するプログラム以外マジでやめといたほうがいい
移植性が大幅に低下する
- 1006 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 04:23:41.78 ID:1Y3hD0GJ.net]
- グローバルやstaticな変数を使用する時は排他制御を必ず行なう
これを厳守していれば使っても大丈夫です もちろん使わずに済む別の方法がある時は別の方法を取るべきです
- 1007 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 06:36:24.15 ID:he9C7sX7.net]
- >>988
・任意のユーザーが任意のクラスをグローバル変数として使うことをOSが禁止するわけにはいかない ・クラスのコンストラクタでOS資源を確保することは普通(イベントオブジェクトを確保する等、ハンドルのメンバを有効な値で初期化しようとする ・誰かがグローバル変数のコンストラクタでOSの資源を確保しようとしたら、この場合初期化前のOSのwrapperが呼ばれる ここまで書かないと>>986がいかにたわごとを言っているかわからないわけ?! >>990 >グローバルやstaticな変数を使用する時は排他制御を必ず行なう まあそれはそう。今回排他制御を避けられるのは >main()で初期化することが保証しているから、グローバルなコンストラの中でいきなりスレッドを起こしてそこから >OSのwrapperを呼ぶ、みたいなktgi行為が無い限りこのシングルトンはマルチスレッドの対策が不要 というktgi行為が無いことの条件付き。
- 1008 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 07:35:15 ID:xDiQzMrD.net]
- >>991
えっと、つまり、使えるものは使わずにはおれない一族に生まれたということですか?
- 1009 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:15:20.73 ID:xhqbcuaF.net]
- >>991
c++11から静的ローカル変数の初期化は自動的に排他制御され、スレッドセーフとなる[10]。 だって。 シングルトンパターンの何を問題視しているんだっけ?
- 1010 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:29:52.88 ID:y04/Kx9U.net]
- 自分で記述するだけならどうとでもなるけど
他人に使ってもらう前提だと 限度はあるにしても色々防護策を講じたくなるのもわかる
- 1011 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:31:14.00 ID:xDiQzMrD.net]
- モジュールの結合度を評価するのにまず排他がどうとか気にするもんかね?
- 1012 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:40:46.42 ID:WMzvufu2.net]
- C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
- 1013 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:43:44.23 ID:ZcCJtqdn.net]
- >>995
それとは独立の問題 並行&並列でも動くことが現代では求められているため 一般的にグローバルやstatic変数の読み書きには排他制御が必ず必要となる 厳密な意味で変数ではなく一度限り初期化される定数のようなものの場合はその初期化が排他制御される保証のみでも大丈夫なだけ
- 1014 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:44:18.42 ID:wykOop5a.net]
- >>994
シングルトンパターンならコンストラクタをプライベートにするんだから、そもそもグローバル変数として初期化できないんじゃない?
- 1015 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:44:58.60 ID:wykOop5a.net]
- >>997
>>993
- 1016 名前:デフォルトの名無しさん mailto:sage [2022/04/15(金) 08:49:06.65 ID:xDiQzMrD.net]
- >>997
グローバル変数批判でまずそれが問題だと思うのはどうかしてるよ
- 1017 名前:1001 [Over 1000 Thread.net]
- このスレッドは1000を超えました。
新しいスレッドを立ててください。 life time: 54日 20時間 52分 24秒
- 1018 名前:過去ログ ★ [[過去ログ]]
- ■ このスレッドは過去ログ倉庫に格納されています
|

|