[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/24 03:29 / Filesize : 284 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part122



1 名前:デフォルトの名無しさん mailto:sage [2016/01/23(土) 23:06:15.32 ID:HdItgJjm.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part121
peace.2ch.net/test/read.cgi/tech/1449240881/


このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】
peace.2ch.net/test/read.cgi/tech/1439849418/

次期規格C++1zはこちら
C++14/C++1z 20
peace.2ch.net/test/read.cgi/tech/1410382924/

■長いソースを貼るときはここへ。■
 codepad.org/
 ideone.com/

82 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 17:13:30.76 ID:MwP9iauO.net]
>>80
そうです、Baseを継承する派生クラスが沢山ある場合が面倒です。
コンストラクタの継承が行われれば、派生クラス側でわざわざ決まりきったコンストラクタを書かずに済むのでコードがシンプルになるなのですが、
それが出来るオブジェクト思考言語は意外と少ないです。

83 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 17:37:45.67 ID:5mNKNaDj.net]
>>82
class B {
public B() {System.out.println(

84 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 17:39:33.39 ID:JvvEVEHG.net]
ダブルクォーテーションで途切れるの悔しい…

>>82
class B {
public B() {System.out.println(”B”);}
public B(int i) {System.out.println(”B i”);}
}
class D1 extends B {} // 自動的に追加されるコンストラクタ内で暗黙的にsuper()
class D2 extends B {public D2(int i) {}} // 暗黙的にsuper()
class D3 extends B {public D3(int i) {super(i);}}
のとき
new D1();new D2(1);new D3(1);
でそれぞれ
B, B, B iを表示
Javaだと引数無しのときだけチョッと手間省けるね

85 名前:84 mailto:sage [2016/01/26(火) 17:46:54.81 ID:LDY5A4Ql.net]
ごめん、今確かめたらそれはC++でも一緒だったw
struct Base {
int i;
Base() : i(0) { cout << ”ok!”; }
};
struct X : public Base {};
これで X x; は普通に行けたねw

86 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 17:50:26.64 ID:XdnYao0l.net]
>>82
なるほど。それなら分かるわ
基底クラスのコンストラクタはある意味継承されてるんだけど
protected(ちょっと違うけど)みたいな扱いになってるんだよな
何かキーワードとかであなたの言う意味での継承が出来てもよい気がしてきた

87 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 18:41:50.54 ID:/Dc76BnU.net]
>>75
釣りは要らん
その内 コンストラクターの継承も知らないのかバーカバーカ
と言うんだろ?

88 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 19:55:14.89 ID:XdnYao0l.net]
釣られたわ
C++11から出来るようになってるね
ideone.com/PwOSrY

89 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 20:04:25.08 ID:yZwoVaS8.net]
>>88
それで十分に嬉しいように見えるんだけど
using Base::Base;の一行を書くのは>>75的には
「子から間接的に呼び出す必要がある」に該当しないのかな?

あと>>77が何を言っているのか意味不明なの俺だけ?

90 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 21:25:05.76 ID:I8Y70xN6.net]
>>51
これってコンストラクタ中から例外飛んで来たらいずれにせよメモリリークするから無駄って解釈でいいの?
この例だとdeleteはされるけど、結局デストラクタが呼ばれるわけじゃないからメンバにポインタ混じっててnewしてたりするとリークするよな



91 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 21:52:07.33 ID:8rZ+8lOF.net]
構築が終わっていない中途半端な状態でデストラクターが呼ばれたらそれこそ大変だ
少しは脳みそ使った方がいいぞ

92 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 22:52:14.01 ID:IXu06oBB.net]
C++ではインスタンスxのコンストラクタ内で例外が発生した場合、
xのデストラクタは呼ばれない(理由は>>91の通り
という言語仕様なのは真実なので、逃げ手としてnewに細工がしてあるだけの話

生のハンドルとかはこれそのものでは救えない。
コンストラクタで生のハンドルを確保するコードを普通に書いたら、コンストラクタが例外を生じたときにリークする

それを避けるための正しいテクニックは、
1) きちんとハンドル(リソース)のwrapperを書いて、
2) そいつをxのメンバにしとく
である(メンバのデストラクタは、xのコンストラクタが例外を生じても呼ばれる

んまー常識的には「コンストラクタで例外を発生させない」とか「例外が発生したら諦める」設計のが
特殊な用途以外では普通な希ガス、

93 名前:92 mailto:sage [2016/01/26(火) 22:56:25.94 ID:IXu06oBB.net]
>>92プチ訂正
s/コンストラクタ内で例(が|を)発生/コンストラクタから例外をスローさせない/g

コンストラクタ内で例外が発生しそうなところはtry { } catch { }で囲ってしまうのも一つの手ではある

94 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 22:58:40.82 ID:usMbn1Xz.net]
>>90
RAII の徹底ができていなければリークする可能性が出てくる。
例外の発生がコンストラクタからかどうかはあんまり関係ない。

95 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:02:54.28 ID:RBo8KHcc.net]
やはりバカにはC++の敷居が高いようだな

96 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:05:13.87 ID:8rZ+8lOF.net]
ラッパーを使うのは王道な一つの手だが
一つの関数内で例外安全なコードを書いてればリークは起こらない。
それすら出来ないようでは他の言語を使った方がいい

「コンストラクタで例外を発生させない」と言うのはやや方向性が違っていて
「プログラムを書かなければリークは起こさない」レベルの思考

97 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:06:58.14 ID:zcSlqmoV.net]
>>95
自己紹介はしなくていいぞ

98 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:12:32.60 ID:I8Y70xN6.net]
じゃあもしライブラリとして提供されてるクラスがメンバに複数ポインタ持っててコンストラクタで複数newして、しかもメモリが足りなくなる可能性が結構高い場合はどうすりゃいいんだ?
他のライブラリ使うのはいろんな理由で無理、ライブラリの互換性のために元のソースいじれないってなったら漏れたらあきらめるしかないのか?

99 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:14:58.68 ID:8rZ+8lOF.net]
例外安全でない糞ライブラリの中身をいじれない場合はどうすればよいの?

質問しなきゃわからないほど馬鹿なのか

100 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:22:01.99 ID:I8Y70xN6.net]
>>99
今まさに近い状況になってて、例外飛んでくるのはまた別の原因なんですけど
実際どうすればいいんですか?自分一人だけライブラリ使わないってのはできないんですけど



101 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:23:01.51 ID:CloTf5dE.net]
まぁでもコンストラクタの途中で例外が発生しても
コンストラクタの中でtry-catchして適切にリソース開放すれば良いだけでは?

102 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:23:51.29 ID:4LzhB3JY.net]
例外処理でメモリリークを気にしたりするのがナンセンスなんよ
例外起きたらあとはリソース閉じて終了するだけのことだから
アプリケーションとしては終了に向かうだけだからリークも糞もないんよ

103 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:27:16.38 ID:XdnYao0l.net]
>>100
ライブラリがバグってるならどうしょうもないだろ
>>102
ずいぶんとおめでたい世界にいらっしゃるようで

104 名前:デフォルトの名無しさん [2016/01/26(火) 23:28:08.68 ID:sH2SZupb.net]
コンストラクタで例外が発生したらそのクラスの何を解放するんだ

105 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:28:59.31 ID:4LzhB3JY.net]
mallocに失敗したのにexit前にfreeを呼びたい
みたいな不思議な連中は一定おるんよ

106 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:30:11.03 ID:8rZ+8lOF.net]
>>101
おおまかにはそれでよいが
最低限 例外中立にしとくのがマナー
具体的にはfunction-try-blockを使うかthrow;で再スローするかラッパーを使うか

107 名前:デフォルトの名無しさん [2016/01/26(火) 23:30:13.68 ID:sH2SZupb.net]
例外発生する=アプリを終了するってなんなんだよ

108 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:30:33.16 ID:XdnYao0l.net]
>>104
例外発生するまでに確保済みのリソース
そんな面倒なことにならないようにRAIIの徹底はもう必須だよ

109 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:31:01.96 ID:CloTf5dE.net]
ちなみにnewしたオブジェクトのコンストラクタ内で例外が発生した場合
デストラクタは走らないけどoperator deleteは呼ばれるからメモリリークしないよ

110 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:34:08.88 ID:TGWAfBDP.net]
>>98
その通りだよ。



111 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:38:07.07 ID:8rZ+8lOF.net]
>コンストラクタ内で例外が発生した場合デストラクタは走らない

揚げ足を取ると、走るケースが全くない訳ではない

112 名前:デフォルトの名無しさん mailto:sage [2016/01/26(火) 23:44:41.90 ID:usMbn1Xz.net]
>>111 ほんとならくわしく。

113 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:02:05.29 ID:zgyqI55G.net]
>>112
コンストラクタ内で例外が発生してもコンストラクタ内でキャッチしてしまえば走らない
コンストラクタ内で例外が発生してもコンストラクタ内でキャッチしてしまえば走らない

114 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:02:50.96 ID:zgyqI55G.net]
ごめwwwwwwww
走るの間違いwwwwwwwwww

115 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:04:30.16 ID:0q1DRp6s.net]
触れないソースのリソースリークなんて気にしても仕方ないだろ
気持ち悪いけど放っておけ

116 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:13:07.10 ID:zgyqI55G.net]
普通に使ってリソースリークの危険があり、
かつユーザーの立場からリークを阻止する手段が無いというのは
ライブラリのバグと言って過言ではない

117 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:34:28.52 ID:zSFGO6dq.net]
いや普通にバグだから

118 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:47:13.92 ID:tYkYQITg.net]
それでお客様が納得してくれるとでも?

119 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 00:52:40.92 ID:0q1DRp6s.net]
仕様ですの一点張り

120 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 01:45:10.90 ID:zgyqI55G.net]
>>100
longjump()か例外をthrowするかして大域脱出すると良い
ID:I8Y70xN6が。



121 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 02:00:29.05 ID:gidaw1Ah.net]
コンストラクタ内でtry catch 再throwでいいんだろ?
何も難しいことなんてないじゃない。

122 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 03:05:27.95 ID:3jiwec3B.net]
>>113
なるほどな
ちなみにコンストラクターから例外が漏れた場合でもデストラクターは走る事がある
struct A {
 A() {}
 A(int) : A() {throw 0;}
 ~A() {}
};
int main() {
 A a{0};
}

123 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 06:38:25.30 ID:oAun2w+9.net]
>>121
つ初期化子

124 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 07:11:47.54 ID:3jiwec3B.net]
>>123
初期化しがどうかしたか?
カタコトではただのアスペだぞ

125 名前:デフォルトの名無しさん [2016/01/27(水) 07:34:44.55 ID:T1kNk2gL.net]
>>108
それはそのクラスが内部で処理することであってユーザーは何を解放するんだよ

126 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 08:01:41.14 ID:7tk5IOS7.net]
↑こんなところにアスペがもう一人

127 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 10:47:19.58 ID:oAun2w+9.net]
>>124
コンストラクタ初期化子

128 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 12:30:07.60 ID:eULyfEEH.net]
>>125
>それはそのクラスが内部で処理することであって

ずっとその話なのだが

129 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 12:56:11.97 ID:zSFGO6dq.net]
初期化子もそうだけどデフォルトコンストラクトされる変数もそうだな
コンストラクタ内でtry-catchできない
やっぱりコンストラクトでの例外はまずいんじゃないか?

130 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 13:59:04.99 ID:oAun2w+9.net]
C++17ではできるんだっけ?



131 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 17:48:02.83 ID:gidaw1Ah.net]
初期化子リストもメンバ変数も関係なくね?
初期化しきれたクラスはデストラクタが呼ばれ、初期化できなかったクラスは内部でcatchしてエラー処理して再送するだけ。
やっぱ単純だよ。

我らがMeyer先生はなんて言ってるの?

132 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 18:08:44.32 ID:7tk5IOS7.net]
>>129
できないと判断した根拠は?
ideone.com/WlFMej

>>131
メイヤー「ワシ、ちょっとC++引退するわ」

133 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 18:10:24.29 ID:7tk5IOS7.net]
一カ所訂正


try m{}, x{}


try : m{}, x{}

134 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 18:15:50.95 ID:7tk5IOS7.net]
>>127
荒らしは去れ

135 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 18:45:02.79 ID:oAun2w+9.net]
>>131
コンストラクタ初期化子に書くメンバーが初期化はコンストラクタのスコープ内部じゃない。
自作クラスだったら君の言うように内部catchすればいいけど他作クラスで例外をthrowするタイプだtry-catchで囲めない。

136 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 18:49:38.11 ID:oAun2w+9.net]
>>134
まさか14以降を前提にしてるなんて言うまい?

137 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 19:31:29.47 ID:3jiwec3B.net]
>>136
お前はコンストラクター初期化子や例外という言語機能がC++14以降だとでも言いたそうだな
どれだけ勉強不足なんだ

138 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 19:39:57.53 ID:6XO7CsMP.net]
お前らに一度確認していい?
初期化リストつったらコンストラクタのパラメータのカッコの横の
クラス名(引数) : この部分 {}
を言うんだよな?
駆け出しの頃にC++プライマーとかいう分厚い本で学んだときは
たしかこうだったはずなんだが
std::initializer_listの出現で落ち着かない気持ちになってきてる

139 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 19:53:14.68 ID:3jiwec3B.net]
>初期化リストつったら
(中略)
>を言うんだよな?

いやまずそこから違う

140 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 20:04:51.00 ID:1b0Lj9r3.net]
クラス名(引数) : この部分は初期化子 {}



141 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 20:41:04.94 ID:aFoLhF8M.net]
>>140
とんくす!
↓少し学んだ

ISO/IEC 14882:1998
12.6.2 Initializing bases and members
ctor-initializer:
 : mem-initializer-list

mem-initializer-list:
 mem-initializer
 mem-initializer , mem-initializer-list

mem-initializer:
 mem-initializer-id ( expression-listopt )

mem-initializer-id:
 ::opt nested-name-specifieropt class-name
 identifier

142 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 20:44:21.08 ID:gqKHFo+S.net]
>>129
だからtry-catchなんかしない。>>94,108のとおりRAIIで解決する。

なんというか10年前にタイムスリップした感がある。↓読んでくれ。
https://www.google.co.jp/search?q=C%2B%2B+%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF+%E4%BE%8B%E5%A4%96

143 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:00:23.97 ID:zSFGO6dq.net]
>>132
あなたのおっしゃる通りです。いい加減なこと言ってごめんなさい魔が差しましたw
やはり大事なのはRAIIの徹底ですね

144 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:08:05.10 ID:oAun2w+9.net]
>>137
えっ?
初期化子までtry説に含めるのはC++11ではできないって言いたいだけなんだけど?

145 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:09:24.27 ID:oAun2w+9.net]
×try説
○try節

146 名前:デフォルトの名無しさん [2016/01/27(水) 21:10:04.69 ID:0xRCKJUw.net]
RAIIって初期化がキモみたいなネーミングだけどデストラクタの解放の方が大事じゃね

147 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:13:01.64 ID:1b0Lj9r3.net]
>>141
ああ、構文規則の非終端記号名のmem-initializer-listと混同していたのか。

148 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:16:28.24 ID:3jiwec3B.net]
>>144
ISO/IEC 14882:1998 15p1 8行目
ISO/IEC 14882:2003 15p1 8行目
ISO/IEC 14882:2011 15p1 8行目
ISO/IEC 14882:2014 15p1 8行目

これのどこを読んだらいったいそんな嘘が出てくるのか

149 名前:デフォルトの名無しさん [2016/01/27(水) 21:19:58.24 ID:hY0OCllE.net]
だからHaskell使えと言っとるだろがボケ。

150 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:23:34.50 ID:zSFGO6dq.net]
>>144
俺はあなたに釣られちゃったけどこれが真実です
ideone.com/rVg5CP



151 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:26:16.20 ID:Qr5LJlmv.net]
このスレって常連の2、3人がID変えながら互いを罵ってんだよな?

152 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:27:35.65 ID:3jiwec3B.net]
>>150
C++14の結果のようだが
コミュ障は去れ

153 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:28:27.16 ID:oAun2w+9.net]
>>148
えっえっ?!?!
今の今まで「14になったら使える機能か楽しみだ」と思ってた...

154 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:30:40.94 ID:hs0c0BKx.net]
> C++14の結果のようだが

そこは突っ込むのが正解なのかw
なんか深遠な理由があるのか
高度な釣りなのかわかりかねたわ(>>144に対してC++14の結果貼り付け)

155 名前:デフォルトの名無しさん [2016/01/27(水) 21:33:45.85 ID:0q1DRp6s.net]
初期化子って何だ?
もしかしてメンバイニシャライザのこと?

156 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:36:46.74 ID:0q1DRp6s.net]
>>153
Exceptional C++に出てくるぐらいにはメジャーだったはずだぞ

157 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:40:42.54 ID:3jiwec3B.net]
>>155
それはですね
狡猾な>>140が初期化子リストとメンバー初期化子とコンストラクター初期化子を混同した>>138を惑わすために出した用語なんです気にしないで
ちなみに規格ではnew A(100)とかの『(100)』の部分を指します

158 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:40:46.23 ID:5WlKM79a.net]
>>155
> メンバイニシャライザ

それちなみにどこで習ったの?
どこの流儀?

159 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:42:32.38 ID:zSFGO6dq.net]
>>152
はあそんなところに突っ込まれるとはw
>>153
あなたはC++14でもだめでC++17になったら出来るかもって思ってたでしょw

160 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:43:28.66 ID:oAun2w+9.net]
申し訳ない。釣りではなく本当にfunction-try-blockはこれから来る規格だと思っていた。
>>156
持ってるけどそんな記述あったかな?



161 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:43:53.84 ID:3jiwec3B.net]
>>158
>>141を100回読み直してこい

162 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:45:04.77 ID:0q1DRp6s.net]
>>158
流儀?
メンバ変数の初期化を行うのはmember initializerだぞ

163 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:46:53.21 ID:gqKHFo+S.net]
>>150
> B() try : _id(GetId()), _a(_id)
> {
> cout << "B:B" << _id << endl;
> }
> catch(int ex)
> {
> cout << "B:B" << _id << " exception " << ex << endl;

このcatch内でのメンバ変数 _id の参照は未定義動作になる。
15.3 [except.handle] p10
> Referring to any non-static member or base class of an object in the
> handler for a function-try-block of a constructor or destructor for that
> object results in undefined behavior.

164 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:47:25.50 ID:0q1DRp6s.net]
>>160
お前絶対読んでないだろw

165 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:48:01.49 ID:VHRBi97o.net]
>>162
ごめんごめん、純粋に何でその名前を学んだか知りたかっただけ
上でも書いたけど俺はC++プライマーって本を読んで学んだんだけど
たしかそれは 初期化リスト って書いてあったはずなんだ(多分)
だからみんなソレをどこで学んで何と呼んでるのか気になっただけ

166 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:49:15.00 ID:oAun2w+9.net]
多分、なんか大昔の記事を読んで最新のものと勘違いしたまま来てしまったのだ...
鬱だ

167 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:51:52.82 ID:zSFGO6dq.net]
>>163
ごめん
その点は危ういと思ったけどGCCだと取り敢えず意図通りになってたから
話の本筋的にはどうでもいいと思っちゃった

168 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:52:17.67 ID:0q1DRp6s.net]
すまん見直したらMoreの方だったw

169 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:52:25.06 ID:3jiwec3B.net]
>>163
そういやそんな決まりがあったな
すっかり忘れてた

170 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:54:30.71 ID:oAun2w+9.net]
>>168
安心した。ありがとう。
俺が持ってるのは2000年11月15日発行とある。
みなさん、すいませんでした。



171 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 21:54:40.52 ID:88/bqypu.net]
みんな企画とか読んでるのか偉いですね
1ページも読んだことないわ

172 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:01:47.89 ID:0q1DRp6s.net]
>>170
Moreも2001年なんだから安心するなよw
その頃からメジャーどころは載ってたはずだ

173 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:10:37.63 ID:0q1DRp6s.net]
>>165
あまり意識したことはないので
恐らくコンパイラのメッセージだな
規格も読んだが後付けだと思う

174 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:13:35.94 ID:oAun2w+9.net]
鬱だ

175 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:15:41.80 ID:jBJgujTM.net]
>>173
> 恐らくコンパイラのメッセージだな

なるほどなるほど!
こういうレスをついにもらえて俺喜んでる

176 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:27:11.15 ID:vltUk2i7.net]
ここは罵倒したりされたりを楽しむ変態スレ。

記憶でレス→お前バカか→バカはお前→証拠だオラ→悪ぃ悪ぃw

これが挨拶みたいなもん。
一度した発言は曲げてはならないという。

177 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:35:48.89 ID:zgyqI55G.net]
RAIIは論理的には正しいかもしれないが
記述量の割に得られる対価が例外に対する備えだけ、
というのが気に入らない

RAIIなプログラムのメモリ消費量はなかなか安定に達しないから(∵確保したり開放したりで断片化が進んだり治まったり、
意図とはうらはらに、実は第三者に対してメモリリークが無いことの証拠提示がヒジョーに厄介なプログラムになってしまったりする

178 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:45:20.30 ID:gqKHFo+S.net]
>>177
隙だらけすぎるだろ。

> 記述量の割に得られる対価が例外に対する備えだけ、
基本的なところは標準ライブラリでカバーされてるんだけど、記述量ってどんなコード想定してんの?
それに、例外以外にreturnやbreakにも利くよ。

> RAIIなプログラムのメモリ消費量はなかなか安定に達しないから(∵確保したり開放したりで断片化が進ん
確保解放のパターンがRAIIで規定されるわけないし、使い方でどうにでもなるでしょ。

> 意図とはうらはらに、実は第三者に対してメモリリークが無いことの証拠提示がヒジョーに厄介なプログラムに
RAII使わない、生でdeleteやらなんやら書いてるコードよりはマシでしょ。悪化する例があるなら見たい。

179 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:49:16.44 ID:zSFGO6dq.net]
>>177
?それはおかしな見解だな
RAIIを徹底するほうが記述量も少なくなる(delete書かなくて済むんだから)し、
メモリリークが無いことも遥かに容易に証明できると思うが?
それで納得しない第三者なんて頭が腐ってるんだから相手にするだけ無駄
断片化については直接new、deleteするのと変わらないし

180 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:55:49.88 ID:zgyqI55G.net]
>>178
いちいちstd::shared_ptr<T>とか打ちたくないし、pSomeSmartPtr.get()ですらちょっと嫌
メモリ直接ならまだ標準ライブラリでカバーされるが、OSがハンドルを返す場合はwrapperを書かねばならない
そしてコンストラクタが例外をスローするのに処置しようとしたら、
漏れの無いtry { } catch { }を書くか、メンバ変数を全部wrapperかスマポにせねばならない
これは苦行以外の何者でもない
そしてクラスの群れを書く面々のうちの誰か一人がしくじれば、やはりリークする

returnやbreakについては、例外と違って伝統的な書き方で対処可能
例外はスマポとか、try { } catch { } みたいな仕掛けが要る



181 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:56:07.86 ID:3jiwec3B.net]
記述量は局所的な見た目の煩雑さのことを言ってるのだろうに
トータルの記述量の話にすり替えとはこれ如何に

182 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 22:59:19.51 ID:zgyqI55G.net]
>>179
>そしてクラスの群れを書く面々のうちの誰か一人がしくじれば、やはりリークする
この危険性についてコードを見るだけで検証完了という信じる方がよっぽどキチ

同じコードを見る話なら、固定長の配列の方が安心できる






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<284KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef