[過去ログ] C++相談室 part157 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
754: 2021/10/19(火)19:56 ID:GtxXqLyf(4/4) AAS
>>753
桜を見る会に桜井誠は呼ばれたのか?
755: ハノン ◆QZaw55cn4c 2021/10/19(火)20:03 ID:KyySFZDA(1) AAS
>>731
炎上学習法とはよくいわれたものです…
756: 2021/10/19(火)20:09 ID:L2ZQN19z(11/11) AAS
違います
今後の心配は園遊会やお正月などのお食事会に?が呼ばれるのか、という点です
757(1): 2021/10/20(水)07:14 ID:0k8Pnquo(1/8) AAS
>>729
RAIIだから例外安全、と言うのは短絡的
文盲に読み飛ばされたのかしらんが>>720と>>721において
? オブジェクトが個々に盲目的にリソースを解放するのが常に安全と言えるか?
? リソース解放時にエラーが生じたものを無視しておいて安全と言えるか?(あるいはコードの追加無しに無視せずに済む方法があるか?)
758: 2021/10/20(水)07:16 ID:0k8Pnquo(2/8) AAS
? リソース解放を解放しない瑕疵があるオブジェクトの混入が無いことをどうやって保証するのか?
という3つの問題提起をしているのに対して、あいまいに取り繕って逃げたのが>>722
?〜?に定説が無いとすれば(実際無いのだが)、例外安全というのは信奉する馬鹿の数だけ定義があるという話
759(1): 2021/10/20(水)07:19 ID:NMVwWGr0(1/9) AAS
盲目じゃねえし
uncaught_excptionsも知らんようだな
って言うとにわかで調べてシッタカこくんだろうけど
今の今までおくびにも出さなかったことで
どの程度の野郎かは察しがついてる
760(1): 2021/10/20(水)07:21 ID:0k8Pnquo(3/8) AAS
だいたい火災で炎上するビルの8階から人が飛び降りたとして、
例外安全とやらでできることはせいぜい人を地面に軟着陸させて生命を守るぐらいの話で、
ビルの火災を消化はしないし(それをやるのは消防署
消化後のビルを復旧はしないし(それをやるのは各種の工事屋
復旧した8界のオフィスに飛び降りた人を戻して業務を再開させることもしない(それをやるのやEmployer
普通の人はまず火災を防ぐことを第一に目指すのだが、
例外安全主義者はそんなスタイルを古いと言い、例外安全に作っとけば安全と言い張るのだ
761: 2021/10/20(水)07:31 ID:NMVwWGr0(2/9) AAS
全然関係ねえよ
マジでビルから飛び降りて氏んだら?
762: 2021/10/20(水)07:33 ID:0k8Pnquo(4/8) AAS
>>759
?〜?のどれにも掠りもしない反応
(を出したことによって知能程度に察しが付く
763(5): 2021/10/20(水)07:35 ID:0k8Pnquo(5/8) AAS
でfgets()に戻るが、以下のコードの例外の捕捉のコストは話の本筋ではないので無視していただきたいのだが
(そのコストが気になるなら「スコープを抜けたら閉じるFILE*」みたいなブツを作ったらfclose()のエラー処理以外は同じにできる)、
void foo() {
FILE* fp = fopen(...); // fpがNULLだった場合のチェックは記載省略
try {
Bar x, y, z;
(fgets()とかのコード)
} catch (Exception ex)
fclose(fp)
}
省4
764(1): 2021/10/20(水)07:39 ID:kO478Zp/(1/2) AAS
バカの主張: バグがあるかも知れないから例外安全は「使い物にならない」
アホすぎだろ…
765(1): 2021/10/20(水)07:44 ID:0k8Pnquo(6/8) AAS
>>764
>例外安全はやれるならやった方が良いのは認める(>>721
>例外安全に予期せぬ事象が起きたときのセーフティーネット以上のことを気体できい(>>727
というわけで文盲に言われたくは無い
特定のケースにおいて、例外でエラー処理を安全に書けてその後のリカバリーもスムーズにいきますよ、
みたいな特定方面で有効なソリューションとして例外安全を勧めるのであれば問題無いのだが、
テキストファイルをfgets()で読むという絶対的に正しい事柄への批判に無理矢理つなげようとするから
話がおかしくなる
766(1): 2021/10/20(水)07:45 ID:GCto648C(1/3) AAS
>>763
x,y,zのデストラクタならcatchに飛んだ時に呼ばれることは保証されてるけど…?
例えばyのコンストラクタで例外飛んでもxは~Bar()呼んでzは呼ばないくらいコンパイラがやってくれるけど…?
そういうの忘れずやってくれるのがコンパイラだから任せようぜっていうのがRAIIなんだけど…?
まさかこんな事も知らずに例外安全がどうのと偉そうに論じてたの?嘘だろ?
767: 2021/10/20(水)07:47 ID:GCto648C(2/3) AAS
>>765
お前はもう喋るなド初心者
768(1): 2021/10/20(水)07:47 ID:0k8Pnquo(7/8) AAS
>>766
ま た 文 盲 か
>(x, y, zの解放が保証される、
と書いてあるわけだが?
しかしだからといっても普通の人はtryブロック内をチェックするだろ、という主張
769(1): 2021/10/20(水)07:55 ID:GCto648C(3/3) AAS
>>768
初心者はおとなしく教科書の質問だけしてろよ
何かを知っているふりをするのをやめろ
770(1): 2021/10/20(水)08:05 ID:0k8Pnquo(8/8) AAS
>>769
質問ですが例外安全の教科書として藻前は何を読んだことがあるのでぃすか?
771(1): 2021/10/20(水)08:13 ID:kO478Zp/(2/2) AAS
> 例外安全主義者にかかってはそんなことはお構いなしである。とにかく安全と言い張る
どこの主張を言ってるのか知らんけどどう見てもお前の方が「文盲」なわけだがw
772(2): 2021/10/20(水)08:27 ID:DhnN+uGO(1) AAS
>>763
RAII を使わず明示的な catch でリソース解放しているコードを見て、一般的な C++ プログラマは「危険」だと見るのでは?
その例だと「fgets()とかのコード」内の return などで fp がリークする可能性があるわけで。
773: 2021/10/20(水)08:31 ID:xpWbVnlK(1) AAS
誰が「例外安全なら大丈夫」と言っているの?レス番は?
774: 2021/10/20(水)09:12 ID:OEiI06HQ(1/5) AAS
Kuso.KENTA.
775: 2021/10/20(水)09:21 ID:glY3n63N(1/11) AAS
いつになっても
do {
} while(0);
でbreakをgoto代わりに使うしかないのか
776: 2021/10/20(水)09:23 ID:NMVwWGr0(3/9) AAS
>>763
めまいがするほどのひでえコード
やめてくれバカがうつる
777: 2021/10/20(水)09:35 ID:OEiI06HQ(2/5) AAS
>>743
観ようとしなければ何も観えない
そんな簡単なことにも気付けない
778(2): 2021/10/20(水)09:39 ID:OEiI06HQ(3/5) AAS
>>757
2GB以上じゃなくて良いけど
そこそこの大きさのファイルで
書き込んでcloseしてる途中に
電源OFFとかになったら例外どころじゃないんだが
最近のOSはちゃんとコンデンサ放電仕切るまでの間に書き込み終了するんだろうか
779: 2021/10/20(水)09:44 ID:OEiI06HQ(4/5) AAS
>>760
サンフランシスコ地震で高速道路崩落←直後に「日本では起こり得ない」と言われた
インドネシアの津波で街が吹っ飛ぶ←直後に「日本では起こり得ない」と言われた
チェルノブイリで原発爆発←直後に「日本では起こり得ない」と言われた
武漢でコロナ感染者急増でパニック&パンデミック←直後に「日本では起こり得ない」と言われた
いつも否定したがる人はいるしそれを信じたがるひともいる
780: 2021/10/20(水)11:10 ID:NMVwWGr0(4/9) AAS
>>778
UPSもアレスタも知らないど素人w
781: 2021/10/20(水)11:15 ID:glY3n63N(2/11) AAS
ファイル編集中、Ctrl+Sを押下して保存しようとした瞬間に停電になったことがある
再起動後、ファイルは存在しているのに中身は\0で埋められていたよ
782: 2021/10/20(水)11:16 ID:PaxGKk4c(1) AAS
>>778
・UPSぐらい付けろよ
・障害が心配なら多重化しとけ
って話で例外安全とはレイヤーの違う話
783: 2021/10/20(水)11:28 ID:EqJEar1P(1) AAS
>>770
古典だけどExceptionalC++あたりから読み始めるのがいいよ
準拠規格が古いから所々アレだけど大きな考え方を学ぶには十分だろう
感想聞かせてね
784: 2021/10/20(水)11:41 ID:Px+syONf(1/3) AAS
いつもの
785: 2021/10/20(水)11:43 ID:BFKUlxpT(1/3) AAS
786以降C++なコードもC++なURLも載せないやつは発言禁止な
786: 2021/10/20(水)12:28 ID:vkb7a42p(1/2) AAS
>>763
try内のコードが例外出さない限りcloseされない
787: 2021/10/20(水)12:55 ID:Px+syONf(2/3) AAS
確かにそうだ
すっかりfinallyのつもりで読んでた
やはりRAIIは正義
788: 2021/10/20(水)13:11 ID:NMVwWGr0(5/9) AAS
いーやfreadで2G超のファイルはvsでも完全にあつかえる不都合はない
と、自信を持って断言できないゴミが
URL乞食でドヤってるのバカすぎ
789(1): 2021/10/20(水)13:28 ID:vkb7a42p(2/2) AAS
C++にもfinally欲しい
790: 2021/10/20(水)13:30 ID:OEiI06HQ(5/5) AAS
fseek()/ftell()が32bit用でfseeki64()/ftelli64()の方を使ってないというオチか
791: 2021/10/20(水)13:36 ID:glY3n63N(3/11) AAS
自信をもって断言したところで、モリカケ・桜を見る会と同じことになるだけだよ
アベノセイダーズは不具合を見つけてくるまで決して許さない
792: 2021/10/20(水)13:39 ID:glY3n63N(4/11) AAS
>>789
コストラクタでラムダ式をメンバ変数に受け取りデストラクタでそのラムダ式のメンバ変数を実行するクラステンプレートを自作すれば問題解決
793: 2021/10/20(水)13:41 ID:NsIIvpqv(1) AAS
fseekの引数はなぜああしたんだろうね
794: 2021/10/20(水)13:46 ID:glY3n63N(5/11) AAS
宇宙人がいないことを証明するための労力たるや
795(1): 2021/10/20(水)13:50 ID:NMVwWGr0(6/9) AAS
不都合があるという主張であろうと
不都合がないという主張であろうと
自分でコード書けないゴミは引っ込んでろ
796(1): 2021/10/20(水)13:53 ID:glY3n63N(6/11) AAS
>>795
そのとおりだな、まずお前が引っ込め
797: 2021/10/20(水)14:13 ID:glY3n63N(7/11) AAS
再帰呼び出し
我々の宇宙は高度な文明を持つ知的生命体の実験により作られたものであると推測するハーバード大学の科学者 : カラパイア
外部リンク[html]:karapaia.com
798: 2021/10/20(水)14:38 ID:NMVwWGr0(7/9) AAS
>>796
おいURL乞食、おまえに言ってんだよ、おまえに
俺はftellで例示するコード出してんだよ
同類呼ばわりすんな穢らわしい
799(2): 2021/10/20(水)14:47 ID:BFKUlxpT(2/3) AAS
#include <iostream>
#include <fstream>
#include <vector>
#include <cstdio>
#include <algorithm>
int main()
{
const char path[] = { "hoge.dat" };
std::vector<char> buffer(1024 * 1024); // 1MB
std::ofstream f(path, std::ios::binary);
省16
800: 2021/10/20(水)15:12 ID:glY3n63N(8/11) AAS
>>799
それは、おま環にすぎないので不具合がないことの証明にはならない
不具合を見つけるのがお前の責務だ
赤木さんのように自○したくなるまで頑張って探せ
801: 2021/10/20(水)15:18 ID:BFKUlxpT(3/3) AAS
今日は2つのIDで頑張ってるみたいだね
802: 2021/10/20(水)15:29 ID:NMVwWGr0(8/9) AAS
プログラム技術板の正規メンバに
クソ以外の乞食が何か寝言ぬかしとんな
803: 2021/10/20(水)15:34 ID:glY3n63N(9/11) AAS
お前らの家の冷蔵庫にエルビス・プレスリーがいないからといって、この世にエルビス・プレスリーがいないことの証明にはならないんだよ
血を吐くまで探せ
804: 2021/10/20(水)15:55 ID:4r95dvH8(1) AAS
不具合あるのを証明したほうがてっとりばやい
805: 2021/10/20(水)16:02 ID:glY3n63N(10/11) AAS
あぁ?わかって言ってんのか?
泥棒の証拠を泥棒に探させるのがアベガー品質だぞ
806(1): 2021/10/20(水)16:09 ID:Px+syONf(3/3) AAS
元々>>637がC++でもfgetsを使う俺は天才などとのたもうて
>>687がFILE*を使うなら例外安全をどう保証するのという話だったのが、
当の>>637は>>691でfread/fgets自体が例外を投げる可能性(?)という謎の問題を考え始め
>>710が根拠不明の2GB制限の話を持ち出し
問題があると考えるひとは存在しない2個の問題を同時に考えて混乱し
まあまあ分かってる人はRAIIすればいいじゃん(ってかfstreamでいいじゃん)で話が終わっている
まとめるとこんなところか?
807(1): 2021/10/20(水)16:17 ID:glY3n63N(11/11) AAS
挙証責任をガン無視できる文部科学省元事務次官前川喜平こそ最強
座右の銘は面従腹背、ライフワークは貧困調査
808: 2021/10/20(水)16:39 ID:NMVwWGr0(9/9) AAS
キチガイ極左は内ゲバで共食いしとれ
809(1): 2021/10/21(木)00:40 ID:ObBh/rk9(1/4) AAS
>>806
俺はcの標準ライブラリ使うならosの関数使えって言ってた人でアンカの中には登場しない人だけど
「根拠不明の2GB制限」についてはlarge file問題というのが昔あった
外部リンク:en.wikipedia.org
LinuxなどUnix系が64bit環境にほぼ移行した現在その問題はレアケースだとは思うけど
32bitアプリが割と残っているWindowsだと実際のところどうなのか分からない
でもfreadくらいは出来そうだと考えわざわざコード書いただけ(>>799)
ちなみにLinuxでもdebian系のantiX 19.4 32bit環境では#define _FILE_OFFSET_BITS 64がないとfopenがNULLを返していた
810: 2021/10/21(木)00:51 ID:l0SlZ35R(1/2) AAS
話の肝は「私が間違ってました。ごめんなさい」と素直に言えるかどうかなわけで
小室文書みたいな屁理屈の羅列はいらねンだわ
811(1): [sage] 2021/10/21(木)01:06 ID:5bux1k1I(1) AAS
>>807
NHK は メード イン ジャパン とか オーダー メード とか表記するのに
メイド 喫茶は なぜ メイド 表記なのですか?
812(2): 2021/10/21(木)01:19 ID:ObBh/rk9(2/4) AAS
ちなみに>>809の「cの標準ライブラリ使うならosの関数」という意味で以前実験した結果も貼っとく
read, fread, std::ifstream::readの比較
外部リンク:ideone.com
systemdのユーザーごとのRAMディスクを使っているのでそれがある環境でだけ動作する
ubuntu 20.04 64bit環境で実行した結果だと↓
$ g++ -O2 test.cpp -o test
$ ./test
227
267
225
省1
813: 2021/10/21(木)03:46 ID:Y6x8PTxQ(1) AAS
>>811
前者がmadeで後者がmaidだからじゃね?
814: 2021/10/21(木)07:45 ID:5PpYpVBN(1) AAS
以前はメードだったと思うけどね
815(1): 2021/10/21(木)11:19 ID:l0SlZ35R(2/2) AAS
ババ抜きはOld maidの日本語訳だよ
セクシズムやエイジズムはポリコレの立場から見てどうだろうね
816: 2021/10/21(木)12:39 ID:u1ltZUWw(1) AAS
regexで\dを使いたい場合はどうやるん?
817: 2021/10/21(木)14:10 ID:ObBh/rk9(3/4) AAS
外部リンク[html]:cpprefjp.github.io
818(1): 2021/10/21(木)17:33 ID:MfhbDLcG(1) AAS
>>812
その比較でなんで fread だけ遅いんだ?と思ってコード見たら fread じゃなくて fgets になってた。
あと read_cpp_standard() の if (std::cin.fail()) もたぶん f.fail() の間違い。
819: 2021/10/21(木)18:24 ID:/1ln80gU(1) AAS
>>815
フェミが言葉狩りのネタにしないのは何故
820: 2021/10/21(木)18:42 ID:7ERuyWg6(1) AAS
言葉狩りなんてないから
821(1): 2021/10/21(木)18:56 ID:ObBh/rk9(4/4) AAS
>>818
thx
>>812のコードは脳内破棄してくれ
指摘された部分を修正した
外部リンク:ideone.com
同環境での測定結果が↓
214
213
214
freadだとバッファリングされるからその分遅いのかと勝手に思ってたらそんなところから間違ってたとはすまんw
822(1): 2021/10/22(金)00:41 ID:bIdSm1HR(1/2) AAS
BB抜きが有ってGG抜きが無いのは差別
823: 2021/10/22(金)00:43 ID:bIdSm1HR(2/2) AAS
>>821
fread最強でFA
824: 2021/10/22(金)01:17 ID:JLUkeFzw(1) AAS
freadのバイナリな
DMA効くのは
テキストはゴミ
825: 2021/10/22(金)02:55 ID:ugOmuUc2(1) AAS
>>822
ジジ抜きもあるよ。
ジジ抜きはジョーカーを使わない。
適当な札を一枚抜いておいて組にならない札を最後まで持ってた奴が負け。
どれが負け札なのか最後までわからないというのがゲームの面白い部分。
ちなみに日本語でジジ抜きと呼ばれているゲームこそが Old maid (行き遅れ、お局様) の本来のルールで、
ペア (結婚相手) がないことを Old maid に喩えた命名になっている。
826(1): 2021/10/22(金)05:43 ID:I4IH0MDY(1/2) AAS
C++20ちょっと書き始めたらvscodeのインテリセンスが何でもないところにエラーの波線出しまくってくる
827: 2021/10/22(金)07:07 ID:viI1I/mh(1) AAS
DMAか、懐かしい
828(1): 2021/10/22(金)12:50 ID:xpSH/+fs(1) AAS
>>826
どの環境でそうなる?
829: 2021/10/22(金)13:37 ID:I4IH0MDY(2/2) AAS
>>828
OS: Windows 8.1 (64 bit)
コンパイラ: MinGW GCC 11.1.0
文句を言ってくる拡張機能は多分普通の"Microsoft C/C++ 拡張機能"でコードの例としては
外部リンク:wandbox.org
こんな感じ
エラーは
operator<=>: 戻り値の型だけで識別される関数はオーバーロードできません
requires(1個目): こちらでは requires 句は許可されていません (テンプレート関数ではありません)
vec: エイリアス テンプレート "vec" の引数リストがありません
省3
830(3): 2021/10/22(金)23:23 ID:Q/4+pM2R(1) AAS
Pythonのリストのように不定型の配列を作るにはどうすればいいですか?
vector<int> a;
vector<double> b;
vector<vector<any>> hoge;
hoge.emplace_back(a);
hoge.emplace_back(b);
みたいなことをしたいですが、エラーになりました。
最終目的は、
void f(vector<vector<any vector<vector<any>>)
のような不定型配列を複数引数に取る関数を作りたいです。
831(1): 2021/10/22(金)23:45 ID:vgFDGRgE(1) AAS
std::variantつかうとか
832(2): 2021/10/23(土)01:05 ID:UQ/XjfNb(1/4) AAS
>>830
出来るといえば出来るんだが、動的型っぽいことを C++ でやろうとすると煩雑だよ。
std::any は何でも格納できるが使うときには結局は元の型として取りださないといけない。
格納することが出来たとして、その後にどういう風に使うのかによってデザインの仕方がかわってくる。
833(1): ハノン ◆QZaw55cn4c 2021/10/23(土)01:33 ID:0KDU0Kot(1/2) AAS
>>830
C++17以降、へえ、こんなこともできるんだ… 外部リンク[html]:cpprefjp.github.io
外部リンク:ideone.com
>>831
ありがとうございます!
834(1): ハノン ◆QZaw55cn4c 2021/10/23(土)01:34 ID:0KDU0Kot(2/2) AAS
>>832
うん、実用に供するまでには結構大変そう、使い道がわからん…
835(1): はちみつ餃子 ◆8X2XSCHEME 2021/10/23(土)01:57 ID:UQ/XjfNb(2/4) AAS
>>834
クラスの設計段階で抽象クラスとの継承関係を作っておくだとかいった方法で多相にするのが
旧来からの方法で、それができるならそのほうがまともなものになると思うんだが、
そうは言ってもユーザーからは弄れない既存のクラスをどうしても使いたいということも無くはない。
根本的な部分をいじれないときに場当たり的にどうにかするよりは std::any や std::variant を使ったら
少しはマシかもねという程度の話で、あまり積極的に使うようなものではないというのが私の感触だな。
836: 2021/10/23(土)08:10 ID:LycCK1PV(1) AAS
void*よりはちょっとマシって程度の感覚だな
837(1): 2021/10/23(土)10:04 ID:rMqegMI3(1) AAS
>>832
その後の使い方は、基本的には
全要素をany_castでstringにして使うつもりです。
不定型可変長のデータを受け取ってcsvファイル出力に使いたい感じです。
838(1): 2021/10/23(土)10:05 ID:bwy1yWHL(1) AAS
void*「むかしはあんなに愛してくれたのに…」
839: 2021/10/23(土)11:08 ID:FGy8rv7m(1) AAS
>>830
any使うんだったら、
vector<vector<any>> hoge;
じゃなくて
vector<any> hoge;
じゃない?
840(1): 2021/10/23(土)11:40 ID:KcnUiVki(1/2) AAS
>>835
>>833じゃないけど>>833のdump()を例えば
template<class... Args>
void dump(const std::variant<Args...>& e) {
std::visit([](const auto& x){
std::cout << " " << x << std::endl;
}, e);
}
template<class V>
void dump(const std::vector<V>& v) {
省9
841(1): はちみつ餃子 ◆8X2XSCHEME 2021/10/23(土)13:07 ID:UQ/XjfNb(3/4) AAS
>>840
そう。 クラスごとに違う挙動が必要ならその違いはクラスの中に隠蔽されているべきで、
クラスを使う側で分岐するのはなんかちょっとあれだなという感じ。
型を調べて分岐するようなコードが嫌だから動的な型を調べる機能を意図的に入れなかった話は D&E にも書かれてる。
(最終的には typeid が導入されてしまったけど……)
ただそれは「型を追加したくなったら分岐も増やすのはめんどいしミスしそう」みたいな話なので、
十分に賢いユーティリティが標準で用意されている今ならそれほど強い動機でもないんだけどね。
842: 2021/10/23(土)13:12 ID:quaWTEll(1) AAS
C++はパラメトリック多相が無いからこういうのは面倒だよね。
とりあえずはstd::vector<std::function<std::string()>>に[v](){ return std::to_string(v); };
あたりを入れとくのが簡単かね。
conceptを「その制約を持つクラスの総称クラス」としてshared_ptrあたりで指定できるようになると便利なんだけどなぁ。
concept_shared_ptrとか用意してくれんかね。
843: はちみつ餃子 ◆8X2XSCHEME 2021/10/23(土)13:16 ID:UQ/XjfNb(4/4) AAS
>>837
any_cast での取り出しは「元の型」でなければならず、
string に変換可能な型であっても any_cast<string> は出来ない。
(やったら例外が飛ぶ)
最終的に文字列になると決めているなら文字列にしてから格納したほうがすっきりするんじゃないの。
844: 2021/10/23(土)14:23 ID:KcnUiVki(2/2) AAS
>>841
まあそうだよね。ありがとう。
845(3): 2021/10/24(日)08:17 ID:mo2+vXTQ(1/2) AAS
AA省
846: 2021/10/24(日)08:20 ID:mo2+vXTQ(2/2) AAS
>>772
コードブロック内のreturnがあるかもしれないんならチェックすれば良いやん?
>>763は普通の人ならチェックするでしょ、という主張
ところが>>722のような例外安全主義者ときては、RAII = 例外安全、で脳がショートしているのや
多分周りも能力に忖度して大した課題を与えていないんだと思う
847: 2021/10/24(日)08:40 ID:i4dOTOfz(1/2) AAS
上では例外安全にするとかしないとか言っていたような気がしたが少し主張が変わったのかな。
- 例外安全を求めるのは当然
- RAIIを使えば比較的例外安全を保証しやすい
- だからといってRAIIを使えば自動的に例外安全になるわけではない
結論としてはこんな感じだと思うが。
848: 2021/10/24(日)08:41 ID:7jz7Y9vl(1) AAS
チェックして例外出さないと解放されないコード書いたのか…
849: 2021/10/24(日)09:13 ID:1SVJ9Wvp(1) AAS
そりゃ例外安全もRAIIも魔法じゃないんだから使えば即安全になるというわけじゃないわな
「ちゃんと使えば」をすっ飛ばして>>845みたいなことを言い出すのも一種の思考停止だろうと思うわ
850: 2021/10/24(日)09:51 ID:v4numFpL(1) AAS
>>845
Barのデストラクタの責務は自分が確保したリソースをリークしないことだけだ
オブジェクトの外側でやってるスレッド間通信のことなんかBarは知らんし別に手当するだけの話
逆に聞くがRAIIを嫌がってBar* x = new Bar;とかにしたらなんか事態改善すんの?スレッド間通信を簡潔に書くための役に立つの?
851: 2021/10/24(日)10:24 ID:P2kmr3bK(1) AAS
そもそもRAIIが例外安全のためっていうイメージ全くないんだけど
リソースのお片付け(≒メモリリーク防止)が主目的ちゃうん?
852: 2021/10/24(日)10:36 ID:i4dOTOfz(2/2) AAS
例外が発生するとリソースを片付け損ねる場合があるってのが例外安全を欠く一番よくあるケースだと思うけど。
主目的がどうとかは別として。
853: 2021/10/24(日)10:45 ID:NLtlOSxj(1) AAS
>>845
例外を生じた場合でもXとなんらかの通信を行うべきなら
thread_connectionみたいなクラスを作ってデストラクタに整合性を保つためコードを書くのがいいかな
「アプリケーション固有の〜を送る」の部分にはそのオブジェクトのメソッド呼び出しにしておく
例外発生時にはデストラクタによってXスレッドに異常を通知してXスレッドが持つ状態の整合性を確保してもらう
Xに通知するのが単なる終了通知なら(成否を区別して処理しなくていいなら)全部デストラクタでいいかもね
上下前次1-新書関写板覧索設栞歴
あと 149 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.048s