前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1636969758/
探検
C++相談室 part159
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
2022/02/19(土) 11:56:42.14ID:kSnJ/KwP975デフォルトの名無しさん
2022/04/14(木) 07:29:49.75ID:Qd4x1CZh シングルトンは要らない子、とヴァカにしていたが
グローバルなオブジェクトのコンストラの呼び出し順序が翻訳単位を超えた呼び出し順序がまるきり不
定になるというC/C++の仕様を回避するのには有効おと1 mgぐらい考えを新ためた
OSのwrapperを書いて、main()でそれを初期化することにして
グローバルなオブジェクトのコンストラから思わずOSのwrapper経由でログを吐かせようとしたらクラッシュして気づいたから
最初のOSのwrapperの最初の呼び出しでまだ未呼び出しなら初期化したら良い(ビコーン ← まんまシングルトン
main()で初期化することが保証しているから、グローバルなコンストラの中でいきなりスレッドを起こしてそこから
OSのwrapperを呼ぶ、みたいなktgi行為が無い限りこのシングルトンはマルチスレッドの対策が不要
グローバルなオブジェクトのコンストラの呼び出し順序が翻訳単位を超えた呼び出し順序がまるきり不
定になるというC/C++の仕様を回避するのには有効おと1 mgぐらい考えを新ためた
OSのwrapperを書いて、main()でそれを初期化することにして
グローバルなオブジェクトのコンストラから思わずOSのwrapper経由でログを吐かせようとしたらクラッシュして気づいたから
最初のOSのwrapperの最初の呼び出しでまだ未呼び出しなら初期化したら良い(ビコーン ← まんまシングルトン
main()で初期化することが保証しているから、グローバルなコンストラの中でいきなりスレッドを起こしてそこから
OSのwrapperを呼ぶ、みたいなktgi行為が無い限りこのシングルトンはマルチスレッドの対策が不要
976デフォルトの名無しさん
2022/04/14(木) 07:33:43.77ID:Qd4x1CZh 訂正orz、
誤: 最初のOSのwrapperの最初の呼び出しでまだ未呼び出しなら初期化したら良い(ビコーン ← まんまシングルトン
正: 最初のOSのwrapperの最初の呼び出しでまだ未初期化なら初期化したら良い(ビコーン ← まんまシングルトン
誤: 最初のOSのwrapperの最初の呼び出しでまだ未呼び出しなら初期化したら良い(ビコーン ← まんまシングルトン
正: 最初のOSのwrapperの最初の呼び出しでまだ未初期化なら初期化したら良い(ビコーン ← まんまシングルトン
977デフォルトの名無しさん
2022/04/14(木) 08:28:49.07ID:79II+WyL 別にシングルトンじゃなくても単に起動時に初期化して渡せばええやん
978デフォルトの名無しさん
2022/04/14(木) 09:59:18.13ID:wwxSZsaE いや要るでしょシングルトン
何らかのリソースマネージャ作るときとか避けて通れないし
何らかのリソースマネージャ作るときとか避けて通れないし
979デフォルトの名無しさん
2022/04/14(木) 10:35:30.42ID:dlHUY+WK >>977
初期化順序の問題って回避できたっけ?
初期化順序の問題って回避できたっけ?
980デフォルトの名無しさん
2022/04/14(木) 10:40:07.14ID:79II+WyL mainでリソース用意しろという話よ
ライブラリだったら初期化用になんか叩いてもらえ
ライブラリだったら初期化用になんか叩いてもらえ
981デフォルトの名無しさん
2022/04/14(木) 10:47:06.20ID:rsrkTEkU グローバル変数をポインタにしておいてmainでnewとか
friend int main(int, char**); とか?
friend int main(int, char**); とか?
982デフォルトの名無しさん
2022/04/14(木) 10:56:36.07ID:79II+WyL なんでグローバル変数にこだわるんだよ
983デフォルトの名無しさん
2022/04/14(木) 10:58:53.82ID:dlHUY+WK984デフォルトの名無しさん
2022/04/14(木) 15:09:30.09ID:4tVKG4Xu 1個でもグローバルなりがあると
エントリポイントの main よりも前に走るコンストラクタ内部であれこれされる可能性を想定する必要に迫られる と
エントリポイントの main よりも前に走るコンストラクタ内部であれこれされる可能性を想定する必要に迫られる と
985デフォルトの名無しさん
2022/04/15(金) 00:01:53.91ID:he9C7sX7986デフォルトの名無しさん
2022/04/15(金) 00:06:58.93ID:xDiQzMrD mainの実行より前に意味があることしようと思ったらコンパイル時しかなかろうよ
987デフォルトの名無しさん
2022/04/15(金) 00:13:00.39ID:he9C7sX7 >>986の主観の話をしているのではない件について:
988デフォルトの名無しさん
2022/04/15(金) 00:22:10.66ID:xDiQzMrD989デフォルトの名無しさん
2022/04/15(金) 04:08:04.71ID:sm6VHVYM 静的ストレージは実装と心中するプログラム以外マジでやめといたほうがいい
移植性が大幅に低下する
移植性が大幅に低下する
990デフォルトの名無しさん
2022/04/15(金) 04:23:41.78ID:1Y3hD0GJ グローバルやstaticな変数を使用する時は排他制御を必ず行なう
これを厳守していれば使っても大丈夫です
もちろん使わずに済む別の方法がある時は別の方法を取るべきです
これを厳守していれば使っても大丈夫です
もちろん使わずに済む別の方法がある時は別の方法を取るべきです
991デフォルトの名無しさん
2022/04/15(金) 06:36:24.15ID:he9C7sX7 >>988
・任意のユーザーが任意のクラスをグローバル変数として使うことをOSが禁止するわけにはいかない
・クラスのコンストラクタでOS資源を確保することは普通(イベントオブジェクトを確保する等、ハンドルのメンバを有効な値で初期化しようとする
・誰かがグローバル変数のコンストラクタでOSの資源を確保しようとしたら、この場合初期化前のOSのwrapperが呼ばれる
ここまで書かないと>>986がいかにたわごとを言っているかわからないわけ?!
>>990
>グローバルやstaticな変数を使用する時は排他制御を必ず行なう
まあそれはそう。今回排他制御を避けられるのは
>main()で初期化することが保証しているから、グローバルなコンストラの中でいきなりスレッドを起こしてそこから
>OSのwrapperを呼ぶ、みたいなktgi行為が無い限りこのシングルトンはマルチスレッドの対策が不要
というktgi行為が無いことの条件付き。
・任意のユーザーが任意のクラスをグローバル変数として使うことをOSが禁止するわけにはいかない
・クラスのコンストラクタでOS資源を確保することは普通(イベントオブジェクトを確保する等、ハンドルのメンバを有効な値で初期化しようとする
・誰かがグローバル変数のコンストラクタでOSの資源を確保しようとしたら、この場合初期化前のOSのwrapperが呼ばれる
ここまで書かないと>>986がいかにたわごとを言っているかわからないわけ?!
>>990
>グローバルやstaticな変数を使用する時は排他制御を必ず行なう
まあそれはそう。今回排他制御を避けられるのは
>main()で初期化することが保証しているから、グローバルなコンストラの中でいきなりスレッドを起こしてそこから
>OSのwrapperを呼ぶ、みたいなktgi行為が無い限りこのシングルトンはマルチスレッドの対策が不要
というktgi行為が無いことの条件付き。
992デフォルトの名無しさん
2022/04/15(金) 07:35:15.38ID:xDiQzMrD >>991
えっと、つまり、使えるものは使わずにはおれない一族に生まれたということですか?
えっと、つまり、使えるものは使わずにはおれない一族に生まれたということですか?
993デフォルトの名無しさん
2022/04/15(金) 08:15:20.73ID:xhqbcuaF994デフォルトの名無しさん
2022/04/15(金) 08:29:52.88ID:y04/Kx9U 自分で記述するだけならどうとでもなるけど
他人に使ってもらう前提だと
限度はあるにしても色々防護策を講じたくなるのもわかる
他人に使ってもらう前提だと
限度はあるにしても色々防護策を講じたくなるのもわかる
995デフォルトの名無しさん
2022/04/15(金) 08:31:14.00ID:xDiQzMrD モジュールの結合度を評価するのにまず排他がどうとか気にするもんかね?
996デフォルトの名無しさん
2022/04/15(金) 08:40:46.42ID:WMzvufu2 C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
997デフォルトの名無しさん
2022/04/15(金) 08:43:44.23ID:ZcCJtqdn >>995
それとは独立の問題
並行&並列でも動くことが現代では求められているため
一般的にグローバルやstatic変数の読み書きには排他制御が必ず必要となる
厳密な意味で変数ではなく一度限り初期化される定数のようなものの場合はその初期化が排他制御される保証のみでも大丈夫なだけ
それとは独立の問題
並行&並列でも動くことが現代では求められているため
一般的にグローバルやstatic変数の読み書きには排他制御が必ず必要となる
厳密な意味で変数ではなく一度限り初期化される定数のようなものの場合はその初期化が排他制御される保証のみでも大丈夫なだけ
998デフォルトの名無しさん
2022/04/15(金) 08:44:18.42ID:wykOop5a >>994
シングルトンパターンならコンストラクタをプライベートにするんだから、そもそもグローバル変数として初期化できないんじゃない?
シングルトンパターンならコンストラクタをプライベートにするんだから、そもそもグローバル変数として初期化できないんじゃない?
999デフォルトの名無しさん
2022/04/15(金) 08:44:58.60ID:wykOop5a1000デフォルトの名無しさん
2022/04/15(金) 08:49:06.65ID:xDiQzMrD >>997
グローバル変数批判でまずそれが問題だと思うのはどうかしてるよ
グローバル変数批判でまずそれが問題だと思うのはどうかしてるよ
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 54日 20時間 52分 24秒
新しいスレッドを立ててください。
life time: 54日 20時間 52分 24秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【サッカー】J2第38節 水戸がJ2初優勝!長崎は2位でJ1自動昇格!千葉は大量得点もPOへ [久太郎★]
- アミューズが同性婚訴訟への声明を発表「誰もが良く生きられる自由」を目指す、東京高裁の判決を受け [muffin★]
- 【イオン】中国湖南省に新大型店を開業 混乱なく地元客でにぎわい モール内にユニクロや無印良品★2 [1ゲットロボ★]
- 【公明党】派遣型風俗店の女性の裸をスマホで盗撮か 徳島県議会議員の古川広志容疑者逮捕 警視庁 [nita★]
- 「まだ朝7時に通勤してるんですか?」にじさんじVTuberがXの投稿で炎上、YouTubeで釈明と謝罪 [muffin★]
- 日本のアニソン歌唱中に強制中断 上海、照明落とされ音楽止まる [蚤の市★]
- 【衝撃】JSが遊んでるゲームランキングがコチラ wwwwwwwwwwwさwwwwwwwwwwwwwwwwwwwwwwwwwwww
- 鈴木農相「お米券でパスタやお菓子も買えるようにします☺」・・・???😰 [931948549]
- 鈴蘭台来た。やること教えろ [535650357]
- ふなっしょい🍬なのらああああああwww🏡
- 【悲報】日本の若者たち、オーストラリアで「最下層の出稼ぎ労働者」として韓国人やマレーシア人の下でこき使われていた [329271814]
- 黒人のフリーレン(Black frieren)、ミーム化するwwwwwwwwwwwwwwwwwww [329329848]
