- 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/
- 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
>そしてクラスの群れを書く面々のうちの誰か一人がしくじれば、やはりリークする この危険性についてコードを見るだけで検証完了という信じる方がよっぽどキチ 同じコードを見る話なら、固定長の配列の方が安心できる
- 183 名前:デフォルトの名無しさん [2016/01/27(水) 23:00:49.72 ID:0xRCKJUw.net]
- あらゆる箇所にいちいちdelete Tとか打ちたくないわ
- 184 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:04:15.53 ID:zgyqI55G.net]
- >>183
もちろんナマポも極力使わない やっても関数内で確保したやつを関数を抜けるとき全部開放する使い方のみとしたい(この用途にはstd::unique_ptr<T>を使ってやっても良い この構造に統一するなら、メモリの断片化は生じない(まあだれか一人がしくじれば…というのは同じだが
- 185 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:07:10.32 ID:zSFGO6dq.net]
- なんだ固定長配列至上主義者か
せいぜい頑張って下さい
- 186 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:08:36.16 ID:3jiwec3B.net]
- >この危険性についてコードを見るだけで検証完了という信じる方がよっぽどキチ
文脈を考慮して読み解かなくても局所的なコード確認の積み重ねのみで全体に漏れがないことを保証できるのがRAIIだと思っていたのだが…
- 187 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:13:29.29 ID:zgyqI55G.net]
- 加えてRAIIにはマルチコア時代にふさわしくない疑いがある
RAIIで確保したり開放したるするメモリがスレッド固有という保証が無い限り、 確保や開放の度に排他制御が行われる スタック上にとられた配列がペナルティーゼロであることを鑑みれば、 InterlockedIncrement()ですら塵も積もれば巨大なコスト足りえる
- 188 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:18:25.90 ID:zSFGO6dq.net]
- そんなにヘビーなループで確保/解放を繰り返さなきゃいけない場面では俺だってダイナミックアロケーションを避けるけどね
- 189 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:20:30.30 ID:eULyfEEH.net]
- >>187
言っていることがよくわからないね shared_ptrのコストが気になるならnewせずに スタック上に確保するなりなんなりすればよいだけだろうに そっちの方が正統派のRAIIだというのに何を言っているのだろうか まったくお門違い むしろスタック上にオブジェクトを確保できる言語の方が珍しくて C++ではそれができるだけでも有り難いというのに
- 190 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:20:47.91 ID:I7Q8DIXY.net]
- 普段よりも応用を利かせたコードの書き方の検討をして、まだ知識があいまいなところ
をはっきりさせようと、本で調べ物をしてたら、「プログラミング言語 第3版」よりも、 「C++ Primer 改訂3版」のほうが、はっきりと疑問に答えてくれると感じた。応用で検討 していることが可能になるか、それとも無理かをすぐに結論を出してくれるみたいな。 もう一方の本は、ストラウストラップ流のプログラム技術の英知を読者に提供しようとは してるようだけど、仕様で細かいところを素早く確認するのはまだ物足りないかもしれな いな。
- 191 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:21:41.35 ID:3jiwec3B.net]
- >スレッド固有という保証が無い限り、
確保や開放の度に排他制御が行われる >スレッド固有という保証が無い限り、 確保や開放の度に排他制御が行われる >スレッド固有という保証が無い限り、 確保や開放の度に排他制御が行われる ひょっとしてRAII=shared_ptrとでも勘違いしたのだろうかこの馬鹿は 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
- 192 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:26:34.20 ID:I7Q8DIXY.net]
- 今は「プログラミング言語 第4版」が新しく出たようだけど、今はC++14らしいが、
この本はC++11のようで、編集が一歩遅れてるという印象は否めない。 読者はC++14準拠の第5版を望んでるかもしれないな。
- 193 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:27:07.17 ID:0q1DRp6s.net]
- >>177
>記述量の割に得られる対価が例外に対する備えだけ さすがにこれはないわなあ 今更RAII無しでlockとか絶対使いたくない
- 194 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:47:08.39 ID:0q1DRp6s.net]
- ここまで俺の自演
- 195 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:47:41.22 ID:tYkYQITg.net]
- 前にEffectiveC++も新版が出たけど、もう絶対的な名著ってわけでもないような
- 196 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:52:26.77 ID:gqKHFo+S.net]
- >>180
10年ぐらい前にはこんな爺さんがよく居たもんだが、まだ居るのか・・・。 > いちいちstd::shared_ptr<T>とか打ちたくないし、pSomeSmartPtr.get()ですらちょっと嫌 慣れる。どうしても嫌なら好きに using でもしとけばいい。 get() なんて使わんでいい。 > メモリ直接ならまだ標準ライブラリでカバーされるが、OSがハンドルを返す場合はwrapperを書かねばならない 自分で書くケースがあるのはそうだが、稀だろ。 稀じゃないなら、個別に破棄処理を漏れなく書いて回るよりも一度書けば済むRAIIのほうがマシ。 > メンバ変数を全部wrapperかスマポにせねばならない > これは苦行以外の何者でもない std::shared_ptr<T>が打てない状況ならそうかもしれないな。 でもそれは個人的な事情であってRAIIの問題じゃない。 > そしてクラスの群れを書く面々のうちの誰か一人がしくじれば、やはりリークする RAII関係ない。 > returnやbreakについては、例外と違って伝統的な書き方で対処可能 伝統的で且つ面倒な書き方でな。RAIIのほうが楽。
- 197 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:54:32.28 ID:0q1DRp6s.net]
- >>195
古いのは確かだがまだ十分使えると思うね 他に初心者用の良い本があれば別だけど
- 198 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:57:30.71 ID:0q1DRp6s.net]
- スマポはgoogleやmozillaのソース見ればそこらじゅうにあるな
それを全部書き下せる自身があるならどうぞ
- 199 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 00:38:12.26 ID:5VmqP1pO.net]
- >>132
絶望した! >>135 いやいや、初期化子に並んでるクラスまでtryで囲む必要ないでしょ? 彼らは彼らで後始末するのだから。 自分の後始末せずに例外投げるクラスがいたら、どんな手段を使ったって後始末できないよ。 コンストラクタに限る問題じゃない。
- 200 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 01:13:22.83 ID:9zxCdjKY.net]
- >>199
後始末したあと例外を投げて来るやつをcatchするんじゃない?
- 201 名前:デフォルトの名無しさん [2016/01/28(木) 06:48:43.02 ID:OteWNMPZ.net]
- RAIIってなんて発音するの?
ライー? ラッツー?
- 202 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 07:29:19.73 ID:y2I8o1dH.net]
- ラール
- 203 名前:デフォルトの名無しさん [2016/01/28(木) 07:37:04.01 ID:WeC7vVSZ.net]
- ライッ!
- 204 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 07:41:40.98 ID:y2I8o1dH.net]
- >>199
catch(...)
- 205 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 08:26:24.97 ID:5VmqP1pO.net]
- >>204
言葉足らずですまんが、自分が言及した自分自身の後始末っていうのはそのクラス内部の後始末のこと。 ハードを止めるとかメンバのメモリ開放とか。 使う側のクラスは後始末しないクラスの内部のことなんてわからないから、どんな手段を使ったってそのクラスの後始末はできない。 だから、そんなクラスがいることを前提として議論するのはおかしいってこいいたかったわけ。 そのクラスの提供者に直してもらうしかない。
- 206 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 08:35:58.09 ID:9zxCdjKY.net]
- >>205
それは正しいが、そこが論点じゃないと思う。 コンストラクタ内でエラーが起きたとき、「後始末はちゃんとやったあと例外をthrowする」クラスに 対処することを想定してる。
- 207 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 08:51:24.46 ID:5VmqP1pO.net]
- >>206
対処する必要なんてあるの? 繰り返すけど、 初期化子で構築完了したクラスはデストラクタで後始末されて、例外吐いたクラスも自身のtrycatch再throwで後始末してるんだぜ? 親側自身の雑多な初期化処理は始まってもいない。 …と書いてみたが、自分が間違ってるわ。 これで対応できない例外シチュもあり、そんな場合は個別対応すればよいだろうとは思ってたけど、例外とは呼べないほどそんな場面は多い気がしてきた。
- 208 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 09:29:37.28 ID:ptM8I7fQ.net]
- >>207
「これで対応できない例外シチュ」ってどんなの?
- 209 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 11:10:21.47 ID:5VmqP1pO.net]
- >>208
dispose()とかclose()みたいな関数を呼んでやらないと終了処理できないやつ。
- 210 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 11:21:23.95 ID:ptM8I7fQ.net]
- >>209
fclose や fstream みたいな、能動的操作処理と破棄処理が不可分になってるもののことかな。 そういうクラスをメンバを持つクラスのコンストラクタで例外が出たとした場合に行う「個別対応」って、 たとえばどんなの? デストラクタが最低限の処理をしてくれてれば何もしなくていいケースがほとんどだと思うんだけど。
- 211 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 13:13:16.79 ID:5VmqP1pO.net]
- >>210
終了処理がsendfinとかwaittimeoutとかだったりしたら、デストラクタで勝手にやられたら困らね? 非対称的に終了処理関数が用意されてることも少なくないと思う。 バグなら直せと言えるけど、設計いけてないから直せとはなかなか要求しにくい。
- 212 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 13:56:52.11 ID:tIrgtpz+.net]
- デストラクタでfcloseとか何ですのん?
ファイル操作をオブジェクトの寿命で扱うのって大掴みすぎねぇ? だからコンストラクタやデストラクタでそんなもんの例外までに話が至っちまう 書き込む瞬間、読み無瞬間だけ一瞬だけファイルを開けや そこまではバッファに書きこんどけや糞ども
- 213 名前:デフォルトの名無しさん [2016/01/28(木) 14:51:57.24 ID:Fy8z7rZ+.net]
- 一つわかった
RAIIと例外を背反と考えてる人がいる
- 214 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 19:35:11.13 ID:CFwd7jm1.net]
- >>212
ログライブラリを開発しているのですが 一瞬だけ開くようにすると処理時間が100 倍以上 になって困っています。 どうすればよいですか?
- 215 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 19:59:05.52 ID:9zxCdjKY.net]
- >>212
ファイル書き込みオブジェクトをファクトリ関数経由で 一時オブジェクトとしてしか生成できないようにしたことがある。 書き込んだらすぐデストラクタが走るのさ。
- 216 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 19:59:21.20 ID:D7v4IB1O.net]
- バッファが無限にあると思ってる人に聞くだけ無駄
- 217 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 20:01:49.04 ID:VbpHGgsr.net]
- >>215
kwsk
- 218 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/01/28(木) 20:02:05.39 ID:YC3cOEYy.net]
- >>214
出力が遅いなら、キャッシュとして出力内容をためておけば
- 219 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 20:11:54.15 ID:D7v4IB1O.net]
- アプリが落ちて肝心な最後のログレコードが見えないのでしたチャンチャン
- 220 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 21:05:31.79 ID:DYq8nyhg.net]
- ログを安易にバッファリングする奴は間違いなく低能
- 221 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 23:03:17.58 ID:iP985GXo.net]
- 自作プログラムのログを取る必要が未だ生じたことが無い天才かも知れん
- 222 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 23:07:22.96 ID:YmAPLaNv.net]
- んなこたない
糞コテ=馬鹿 で決まり
- 223 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 23:11:59.87 ID:iP985GXo.net]
- ログメッセージを複数スレッドから単一のコンソールに出す場合はcerrよりcoutの方がメッセージの1行同士が混ざる危険性が目に見えて減る
デバッグレベルならprintf()して何か条件を満たしたらfflush(stdout); throw;、が最強
- 224 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 23:17:33.09 ID:Fy8z7rZ+.net]
- >>223
>ログメッセージを複数スレッドから単一のコンソールに出す場合はcerrよりcoutの方がメッセージの1行同士が混ざる危険性が目に見えて減る 気のせいだろ マルチスレッドなら、素直に同期したほうが良いぞ
- 225 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 23:50:40.02 ID:ptM8I7fQ.net]
- >>211
その困る場合の「対処」の例が聞きたかった。 デストラクタに嫌な終了処理が埋まってて困るという場合は対処のしようも無い =結局何もしなくていいんじゃないの? それで実用上の問題があるなら直せと言えるはず。 コンストラクタで例外が飛んだってことは問題の終了処理を持つオブジェクトを使って やろうとしてた処理全体は失敗したわけで、正常処理の締めに必要な 終了処理( fstream で close() とか)の明示的呼び出しも必要ないことが多いだろうし。
- 226 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 19:24:04.25 ID:dpjhh/AA.net]
- >>52
> > A *a(int i) {return as.add(new A(i));} > add() の中の push_back() で例外飛んだらリークする。 これはpush_back()出来なかった分をケアしてやればおk? https://ideone.com/s4ibLz ・天然のstd::bad_allocは得られなかったので誤魔化した
- 227 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 21:58:56.14 ID:V57FZVNV.net]
- 生ポ好きの書きそうな糞みたいなコードだな
↓こんなんでいいだろ v.reserve(v.size() + 1); v.push_back(new Fuck);
- 228 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 22:53:49.61 ID:tuK26dsC.net]
- 技術的な話題をせず
ブログラミングを種に喧嘩ばかりしてるやつって何なの チンパンジーなの?
- 229 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 23:21:25.56 ID:q1Jl0W+Y.net]
- いきなりどうした
誤爆か?
- 230 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 23:29:27.61 ID:HWJSMXKP.net]
- >>227
そんな意味不明なreserveする奴が偉そうなこと言っても
- 231 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 23:35:27.84 ID:ASWZHNV8.net]
- >>226
おじいちゃん、「おとなしくスマートポインタ使えば」おkだっていったでしょ。聞こえてる?
- 232 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 23:52:06.13 ID:Hpd/92hj.net]
- >>230
いや意味が全く無いわけではない std::vector::push_back()呼び出し時点での余分な領域確保とか、速度低下が最小化される
- 233 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 00:09:33.50 ID:VhIzDspW.net]
- >>232
230 じゃないけど、 >227 の reserve() で「速度低下が最小化される」なんてことは無いでしょ。 単発なら変わらないだろうし、ループした場合は reserve() しないほうが速いし。
- 234 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 00:17:51.94 ID:lYkNZO2m.net]
- >>232
ないない push_backで領域が足りなければreserve相当のことは自動的にされるし まあないだろうがstd::vectorの実装によってはsize()+1のreserveが速度に悪影響与えることだってあり得るんじゃないかな >>227のもう一つ痛いところはreserveさえしておけばpush_backでの例外が無いと決めつけてるところ そんな規定はないだろ?
- 235 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 00:21:53.24 ID:nKxSIfYZ.net]
- >>234
> push_backでの例外が無いと決めつけてるところ というより、それを一切考慮してない希ガスw そいつ一人だけ問題の本質に到達できていない bad_allocが投げられるのは一緒ってことも知らないんだろうし
- 236 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 00:55:16.18 ID:GfziY506.net]
- はてどこからbad_allocが出てきたのか
- 237 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 03:14:53.57 ID:HpDJFp9+.net]
- >>233、>>234
漏れは慎重に「std::vector::push_back()呼び出し時点での」と限定して書いたで?
- 238 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 05:43:02.21 ID:VhIzDspW.net]
- >>237
ん?だから何? push_back() 関数内での領域確保・実行時間を減らして、それらを push_back() の 直前の処理に移動することに何か意味があるとでもいうの?それはどんな場合にうれしいの?
- 239 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 05:59:47.15 ID:GfziY506.net]
- A「意味がないわけではない」
「〜される」 B「そんなことは ない」 A「そんなこと ある だろ」 B「だから何?〜だと何かいいことあるのか?」 >>232の2つの文のどちらについて話をしているのかの認識がずれていることに気付かない低能どもの会話は滑稽だな
- 240 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 06:17:44.28 ID:GfziY506.net]
- やっぱり馬鹿にC++は無理だな
メモリ確保のnew/deleteは禁止にしてスマポとコンテナーだけ使っとけ ついでに馬鹿はshared_ptrも使用禁止にしといた方が安全
- 241 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 11:02:01.65 ID:u8r8Wxi4.net]
- > v.reserve(v.size() + 1);
> v.push_back(new Fuck); やっぱり馬鹿にC++は無理だなw push_backの直前で+1サイズのreserveとかw www.cplusplus.com/reference/vector/vector/reserve/ ここのExampleみてお勉強しなおしたら? 例外投げるのも書いてくれるから学んどけよ
- 242 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 11:46:11.52 ID:GfziY506.net]
- 初回がresize前のcapacityと比較して何が言いたいのかよくわからん例だな
push_backはcapacityに余裕が有るときに再アロケーションしないことは保証されているが 例外を出さない保証は23.3.6.5から読みとれないな やはり馬鹿にはスマポを強制したほうがいい
- 243 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 13:13:55.69 ID:VK1fBsAo.net]
- >>238
reserve()とpush_back()のどちらで例外が発生するかという文脈において、 >>227のreserve()がpush_back()の直前行であるという解釈は一体… まあv.reserve(v.size() + n);ならともかく、v.reserve(v.size() + 1);だったから気持ちはわからんでもない
- 244 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 14:18:45.97 ID:GfziY506.net]
- どうみても>>227はpush_back(というかnew)の直前にしか見えないのに
何を言ってるんだお前は
- 245 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 15:00:28.25 ID:9j1RlcoP.net]
- 挿入前に拡張しておけという有難い教えだな。
- 246 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 16:17:33.41 ID:GfziY506.net]
- >>245
挿入前に拡張すると(要素のコンストラクター以外では)例外が出ないという保証はある?
- 247 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 16:22:43.98 ID:AurOqJPw.net]
- >>245 はC++とは違う話題かと。
Cとなら関係あるかも知れないが、プログラミング言語でないC。 もちろん俺の読み違いかもしれない。
- 248 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 16:27:26.60 ID:7MlWNObS.net]
- あと一個で例外が飛ぶようなメモリ状況で
☆一行のとき v.push_back(foo); // ここで例外 ☆二行のとき v.reserve(v.size() + 1); // ここで例外 v.push_back(foo); こうなるだけじゃないの? 新たな連続した一本のメモリが確保できないと例外なんだから
- 249 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 16:35:52.43 ID:lYkNZO2m.net]
- >>246
規格を読んだ限り保証はされてないね 現実に存在する実装ではreserve済みであれば生ポのpush_backじゃ例外発生しないだろうけどね そんなことはアテにしちゃいけない
- 250 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 01:01:58.63 ID:CuJD672c.net]
- reserveで例外かわせても、次のnewによるメモリ確保で例外になる可能性はなくならないのだから、
newを一旦別の変数で受けるしかないでしょ hoge h; h = new hoge; vec.push_back(h); が正解。
- 251 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 01:58:17.63 ID:fnCrDph6.net]
- いやいやwもういいからスマポをmake_uniqueとかmake_sharedで使っておけ
バカはnewを書くな!
- 252 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 02:09:31.02 ID:CuJD672c.net]
- >>251
あんたバカバカ言ってるけどnewを使うかmake_sharedを使うかはこの問題の本質じゃないから。 馬鹿じゃないならわかるよね?
- 253 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 02:22:38.94 ID:dRJvSEmL.net]
- どうなんだろうね
vec.push_back( new t() ) の場合、newで例外が発生したらpush_backは実行しないんだから関係ないと思うんだが push_back呼ぶ前の、スタックに引数を積む段階で例外が発生するわけだから push_backは呼ばれもしないし、全く関係ないと思うんだが
- 254 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 02:25:49.77 ID:fnCrDph6.net]
- >>252
あなたが問題の本質を理解してると思えないが? newを変数で受けたってなにも変わりはしないよ てか、まずはhoge* hにしてから言ってくれない?
- 255 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 05:14:31.96 ID:yDMVnQCY.net]
- java厨ってnewしたままホウチミンだよね
- 256 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 06:43:17.15 ID:JTo/Q0C3.net]
- >>250や>>253のような
C++の教科書にある間違ったコードのテンプレのような糞コードを真顔で言い出す低能を見ると やはり馬鹿にはスマポとしか言いようがない
- 257 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 17:11:12.73 ID:Ev74Df4F.net]
- そのjava厨が何を指すのか曖昧だが
Javaでは普通、ネイティブリソースはRAIIで開放するぞ
- 258 名前:デフォルトの名無しさん [2016/02/01(月) 17:14:07.57 ID:/UrjTotH.net]
- ジャバってデストラクタみたいなの追加さらた?
- 259 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 17:59:52.82 ID:fnCrDph6.net]
- JavaでRAIIとかもうわけがわかんねーな異世界に飛ばされたような感覚だよ
- 260 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 18:03:33.95 ID:JTo/Q0C3.net]
- 確かにJavaのRAIIはCloseableとAutoCloseableの違いを理解してないと正しく使いこなせないからな
>>259のオツムがフットーしてしまうのも致し方ない
- 261 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 19:47:56.26 ID:FCPkKuCG.net]
- C++に移ってきたjava厨だよ
newしたままdeleteしねぇ糞ソース大量生成しやがる
- 262 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 20:09:02.04 ID:qjT3Q9+K.net]
- >>261
Java厨は犬派で、C++厨は猫派だからな newと鳴いたら、deleteるからな
- 263 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 20:24:37.67 ID:ZBzDFClp.net]
- >>262
こういう喩え話って、短い文章中に多くの情報が込められてるものだが。 無粋を承知でお願いします。解説してください。
- 264 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 20:42:15.43 ID:aUqGS129.net]
- >>261
Java 厨に生ポなんて使わせるお前が狂ってる
- 265 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 20:46:33.11 ID:qjT3Q9+K.net]
- >>263
深い意味は無いよ C/C++やるときはnewしたらdeleteせよ!って鉄則でしょ ニャー(new)と鳴いたら、必ずデレてる(deleteる)からC++厨は猫派 単なるダジャレだよw
- 266 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 20:51:56.51 ID:JTo/Q0C3.net]
- >newしたらdeleteせよ!って鉄則でしょ
低能のお前にはわからないかも知れないが そんなことはない
- 267 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 21:00:17.78 ID:fOHJkiXU.net]
- 猫は飯くれと撫でろしか言わない
自分が人間より上だと思ってるのでデレることはない
- 268 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 21:32:50.64 ID:JTo/Q0C3.net]
- >>264
ジャバ厨とレッテルを貼るのではなく、たまたまソイツが低能だからということに気付くべき Javaでもリソース開放は行うし、C++スレにも>>250,>>252,>>253のようなメモリも開放できない奴もいる
- 269 名前:デフォルトの名無しさん [2016/02/01(月) 21:42:26.29 ID:BsHDgmsO.net]
- 生ポってどんな場面で使うの?
- 270 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 22:07:54.53 ID:wHu9vKIt.net]
- >>268
低脳な Java 使いだから Java 厨ってラベル貼られてることに気づくべき
- 271 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 22:57:12.27 ID:47CQ9v48.net]
- >>269
ツリー構造で子が親へ参照を持つときに使ったことがあるな 相互参照するけど、親の寿命管理が必要が無いのでshared/weak_ptrが不要なケース ↓こんな感じ class tree_view { tree_view *parent; vector<unique_ptr<tree_view>> children; };
- 272 名前:デフォルトの名無しさん [2016/02/01(月) 23:10:37.79 ID:BsHDgmsO.net]
- >>271
deleteの出番なしか
- 273 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 23:55:10.43 ID:CuJD672c.net]
- >>268
だったら模範解答貼ってみせろよクズ
- 274 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 00:06:14.39 ID:ygGmQV70.net]
- >>273 >>231
- 275 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 00:14:57.63 ID:oBfAWjKR.net]
- >>271
子を作り管理するのは親ですか?
|

|