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