1 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 04:55:24.99 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part94 toro.2ch.net/test/read.cgi/tech/1329512856/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.78【環境依存OK】 toro.2ch.net/test/read.cgi/tech/1331894668/ ■長いソースを貼るときはここへ。■ codepad.org/ ideone.com/
348 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 07:41:07.42 ] いやすまんnew_handlerか、 new_handler中身でやることのパターンは何通りかあるが、結局例外を投げてしまう場合、と読み替えてちょ
349 名前:デフォルトの名無しさん [2012/05/26(土) 13:07:43.57 ] コンパイラごとのSTLのアルゴリズムは イテレーターのクラスによって要請されているインターフェイスの オペレーターを全て実装していることを仮定されていますか? よろしくお願いします。
350 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 16:52:27.58 ] >>349 C++に準拠してれば、C++の仕様に沿ったオペレーターを実装してるだろう。 C++に準拠してないコンパイラーの話なんかされても知らんがなとしか言えん。
351 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 17:23:19.31 ] >>349 何を聞きたいのかわからんが、 一応テンプレートに現れるシンボル(オーバーライドされたオペレータ含む)はtwo-phase lookupと言う規則で解決され、 インスタンス化しないテンプレートに現れるシンボルやオペレータについては宣言も実装も一切要らない
352 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 17:43:29.25 ] すなわちSTLアルゴリズムの使用するイテレーターテンプレートのインスタンスの インターフェイスの提供するファンクションはSTLで実装されているイテレーターのイテレータークラス によって類別されて決定される全てのファンクションが実装されていることを前提としているのでしょうか?
353 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 18:00:41.46 ] コンセプトが導入されてない現状ではそのアルゴリズムの実装が使うイテレータの機能だけが使用可能ならば問題ない だから現状ではイテレータの要件を完全には満たしてないクラスを渡しても動作するアルゴリズムの実装はありえる
354 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 18:05:54.57 ] ただし、あるアルゴリズムがイテレータのどの機能(ってfunction=関数?)を使うかは実装依存。 一回動けばいいような書き捨てプログラムでもない限りきっちり作っておくが吉。
355 名前:351 mailto:sage [2012/05/26(土) 18:56:58.81 ] ああスマン、自作イテレータをSTLのアルゴリズムに食わせる話か、 初心者なものでイテレータはSTLのコンテナから出てくるものが全てだと思い込んでいた、
356 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 20:27:12.61 ] 自前でちゃんとしたイテレータを書くのは 結構面倒くさいからboost使うといいよ
357 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 21:41:27.08 ] >>348 読み替えてもやっぱり new_handler とメモリーリークの関連が見えてきませんね。
358 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 21:50:08.94 ] 変態イテレータあるよな for_eachで回すだけで面白い事が出来る奴とか
359 名前:291 mailto:sage [2012/05/26(土) 21:52:12.10 ] >>357 =294 ? 俺は、>>275 がnew_handlerでなんとか出来るらしいと 書いてたからnew_handlerでメモリーリーク対策できなくねと書いたまで。 new_handlerとメモリーリークが関係するかはしらんがな。
360 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 21:57:56.25 ] そうか。すまんかった。
361 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:03:50.90 ] >>357 Fooのコンストラクタ内で例外を捕捉しないものとして、 >347な状況でnew_handlerから(何でもいいが)bad_alloc等の例外をスローすると、Foo::m_pが指す先のメモリがリークする >347の状況であってもnew_handler内で(あらかじめ非常用にリザーブしておいたメモリから割り当てる等の手段で) 例外をスローせずに処理した場合、リークは起きない よって、new_handlerの中身がリーク発生に全く無関係とは言えない
362 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:09:06.28 ] 空きがもうない状況の話なのに 空きがあったらってぶっちゃけ関係ないよな
363 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:18:29.67 ] >>362 >空きがあったらってぶっちゃけ関係ないよな 空き0前提はともかく、非常用のリザーブ領域まで0前提なのか否かはスレの流れからは自明ではありませんね〜 new_handler内でユーザー向けダイアログボックス用にリザーブ領域メモリを割り当て、 エラー表示した後プログラム終了、という設計も有り得る
364 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:22:05.70 ] >>363 newが例外を出した時点で、new_handlerは失敗してる。
365 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:25:43.17 ] >>363 newが例外だしてりゃリザーブ領域空ですよね
366 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:30:47.43 ] >>364 ,>>365 kwsk デフォルトのnew_handlerを自作new_handlerに差し替えた後でも newが勝手に例外をスローするというのは初耳
367 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:36:04.77 ] >>366 自作new_handlerが何も割り当てできなかったらNULLでも返す気か? 要点は例外じゃなくて、new_handlerがなすすべがない状態におちいてっるて 所なんだからそれぐらいは解れよ
368 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:41:05.88 ] >>366 つまらん事で意地をはるな 得することなんて何もないんだから
369 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:48:40.40 ] >>367 自作new_handlerなんだから、なすすべがない状態に陥らないように設計もできるよ? 単純な方法としては、プログラムの起動時に数KBかそこらのメモリを非常用にnewしておき、 そのポインタを大域変数g_pReservedに記録、 その後本当にメモリが0になったらg_pReservedからとりあえず返し、ただしプログラム終了フラグをセットして 速やかにプログラムを終わらせる、みたいな そのためのnew_handlerです
370 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:53:03.92 ] >>365 の話がでてるのに、リザーブがあればという。 もうダメだなこの人完全に意固地になってる
371 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:53:30.08 ] >>369 g_pReserved が使われた後にもっかい new したら同じこと。
372 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:55:46.29 ] >>361 元々可能性の低い失敗がもし起こったらどうなるか、って話をしてるのに 可能性をもう少しほんのちょっとだけ下げる方法の話をしても意味ないでしょ。
373 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 22:57:52.31 ] >>369 話の論点からずれるけどアホだろあんた 最初にnewしてなければその分空きがあったはずで、意味がない。 new_handlerとして有効な使い方は、高速化の為にだけ先読みしてた 画像データなどのキャッシュ解放。不要なデータを削除すんのが普通。 #余談だから無視してくれ
374 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:09:46.56 ] >>370 デフォルトのnew_handlerを自作new_handlerに差し替えた後ならnewが勝手に例外を投げることはないから、 >365の言うような現象は起きない。よって、>365に基づく批判はナンセンスだし >>371 まあそこらの細かい設計は一考を要するが、 別にg_pReservedをただ一つのオブジェクトに一括で返さねばならないわけでもなし >>372 可能性を下げる方法の話ではないよ。プログラムを正常終了させる話。 本当にヒープ0になってからでは何も仕事はできない、という主張をするなら、 後始末という仕事を正しく遂行するため用のメモリをあらかじめ確保しておくという発想に到らねばおかしい >>373 無視するが、>372へのレスの通りである
375 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:17:56.17 ] >>374 g_pReservedが空になったらどうする気だ?
376 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:21:13.73 ] >>375 本当にそうなったら万事休すだが、 やる仕事は後始末、と限定し、それに必要十分なメモリ量を見積もって g_pReservedとして確保しておけば、それは避けられる
377 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:23:24.66 ] >>376 万事休すになった時のことをみんな言っているんだけど それと、その時あんた例外なげないっていってたけどどうする気だ?
378 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:33:22.47 ] >>376 newを呼ぶ側からすればどこから取ったかなんて知らんのですよ。 取れれば有効なポインタが返り、取れなければ例外、それだけ。 足りなくなったのでクリーンナップして終了させる必要があるなんて知る余地もない。 std::vector<T>あたりのメンバ関数/コンストラクタで足りなくなったとして、お前は一体何をすればいいと言うつもりだね?
379 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:36:22.15 ] >>377 「万事休す」に2種類あることに注意だな。ただしどっちの解決策も示し済みwwwwww (1) 後始末を遂行するためのメモリがリザーブ領域に残っているがそれ以外が0になった「万事休す」なら、 リザーブ領域のメモリからの割り当てて後始末を遂行し、プログラムを正常終了すれば良い(>369, >374の3コ目) (2) 後始末を遂行するためのメモリまで0になる「万事休す」は、 >376のようにきちんと必要なメモリ量を見積もって確保しておけば生じない ていうか、漏れとしてはnew_handlerの一活用方法を述べているだけで、そればかりに食いつかれてもなんだか悲しい 興味がおありの向きは、自力でnew_handlerを調べて活用方法でも考えたらどう? 例えば、new_handlerから自作GCを起動してしばらく使っていないオブジェクト(当然GCで管理する設計にする) を解放し、空いたメモリを返すとか
380 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 23:40:36.58 ] >>376 >>369 のやり方をすれば、ヒープが枯渇するタイミングが早まるだけで、 使えるヒープの総量は変わらないんだけど
381 名前:デフォルトの名無しさん [2012/05/26(土) 23:54:34.16 ] >>378 >newを呼ぶ側からすればどこから取ったかなんて知らんのですよ。 おk newがメモリをどこから取るかに依存するような話はしていないつもりだが >std::vector<T>あたりのメンバ関数/コンストラクタで足りなくなったとして、お前は一体何をすればいいと言うつもりだね? 漏れはg_pReservedに残っているメモリでプログラムの後始末を遂行し、終了するという考え方を示した。 後始末と終了以上の仕事をさせたいというならどうするか考えるのはYOUの仕事ですな >>380 使えるヒープの総量が変わらない、はその通り >369のやり方は、後始末を遂行する余力を残した状態で、ちょっとだけ早期にヒープ枯渇を察知することに意味がある。
382 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 00:22:31.86 ] >>381 おい、new_handlerが不足を察知したところでnewを呼ぶ側にはそれを知る術がない、といっているのだが。
383 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 00:27:33.02 ] >>379 リザーブが枯渇した後なんだから(1) は文脈としてありえないだろ 見積もれないからnew_handlerが呼ばれてるわけで(2)も終ってる
384 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 00:36:22.89 ] >>374 > 可能性を下げる方法の話ではないよ。プログラムを正常終了させる話。 どっちにしてもメモリーリークと関係なくね? プログラムを正常終了させる話にしても、普通にスマートポインタつかってりゃ 例外が飛んで catch されるなり terminate() されるなりしてプログラムを終了 させたければさせられるわけだが、そのよくわからん new_handler を使う方法は 何がうれしいのかさっぱり。
385 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 14:26:48.55 ] >>328-383 Effective C++ 改訂2版 p.49に>363に類似だがより良い方法の記述がある >たとえばプログラム起動時に予備として大きなメモリブロックを割り当てておき、 >new-handlerが初めて呼び出されたときにそのブロックを開放するという方法がある。 記憶管理の話は荒れますねwwwwww
386 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 14:31:55.15 ] >>385 荒れてる原因は話題じゃなくて、無理を通そうとする若干一名に見える。
387 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 14:34:23.79 ] >>384 >385の引用の続きだが >予備のメモリを解放するときには、ユーザーにメモリが少ないことを警告 >し、もっとメモリを追加しないと今後の要求が失敗する恐れがあることを >知らせるメッセージを出す事が多い。 ↑これはメッセージを出すケースだが、予備が十分なら、 メッセージを出すのがある程度高価な処理であるケース (例えばダイアログボックススに長いメッセージを出す必要があり、文字列をnewしたい場合等)に対応できる。 また、ヒープメモリが予備含めて完全に0になった状態で 「(例外をcatch等して)プログラムを(正常に)終了させたければさせられる」 という>384の自信はどこから来るんだ;
388 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 14:36:00.96 ] >>386 違うな。Effective C++の著者と漏れとで少なくとも2名だ
389 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 15:00:39.65 ] >>388 お前か。 みんなが >>361 の「new_handlerの中身がリーク発生に全く無関係とは言えない」について ツッコミを入れているのがわからないの?
390 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 15:19:59.91 ] >>389 じゃあ藻前ら流の「全く無関係」のwell-definedな定義と「全く無関係」であることの論証よろ 少なくとも>388は、A,Bを命題として、「A→Bかつ¬A→¬BだからAとBは無関係とはいえない」、 という論法(のちょい派生)なわけだが
391 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 15:21:59.07 ] しつれい × >388 ○ >361
392 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 15:27:48.24 ] >>390 命題A,Bってそれぞれ何のこと?
393 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 16:04:43.89 ] \ / /. : : : : : : : :ヽ-‐.: :_;. --- .._: : : : : : : :\ \ / _ 争 も _ /, -‐==ミ: : : : _,ィニ-‐……ー-: 、`ヽ、: : : : ヽ、 _ 争 _ _ え っ _ . .:´: : : : : : : ≠:7: : : : : : : : : : : : :ヽ、 ヽ| : i : : :, _ え _ _ : . と _ /.: : : : -‐: :7´: : /:,ハ : : : :ヽ : : : ゝ-- :\ | : :! : : : , _ : _ _ : _ /, -‐/.: : : : :i : : /ィ:爪: : :\ :\ : : :\: : :`ト : !: : : :′ _ : _ 〃 /. : : : : : : |.:イ :ハ:| \: .、\: : xィ¬ト、: :| : : ! : : : : :, / \ /.: :/.: : : : /l : |/Гト、 / |_,ノ0:::ヽ : : :i : : : : :′ / \ / | | \ | .:/.:/. : : :i: i : | |ノ0:::ト ::::::::::::: |: :∩::::::ト: : : !: : : : : : :, / | | \ ∨i: |: : : : |: :ヽ| |::∩::| :::::::::::::::: !.::∪::::::| |: : :i : : : : : : ′ ,ィ /〉 |: |: : i : :', : | |::∪::| :::::::::::::::: !: : : : : :||: : i : : : : : : : :, / レ厶イ ヽハ: : :、: :ヽ| l : : : |::::: , ::::└――┘ ! : : i : : : : : : : ′ / ⊂ニ、 い、: :\/  ̄ ̄ ', : : i : : : : : : : : , _, -‐' ⊂ニ,´ r 、 _ ヽ: :〈 <  ̄ フ |: : : ! : : : : : : : :′,.-‐T _,. -‐'´ ̄ くヾ; U| | : \ /| : : :i : : : : :_, -‐' | / r―' ヽ、 | : : : \ イ: : :| : : :i_,. -‐ |/ `つ _  ̄ ̄Τ`ー―-- L: : : : : `: : . . . __ .:〔: : :|: : :r┬' |
394 名前:デフォルトの名無しさん [2012/05/27(日) 19:45:53.79 ] このスレはC++/CLIもやってるの?
395 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 19:49:06.86 ] 共通の話題なら扱うだろうけどCLI固有の話となるとご遠慮願いたい。
396 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 20:20:49.72 ] CLIはこっちか 初心者用しかないのが気にはなるが くだすれC++/CLI(初心者用)part2 toro.2ch.net/test/read.cgi/tech/1268613679/
397 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 21:00:36.93 ] 初心者といっても、C++/CLI初心者にはC++と.NETの両方とも中級以上が必須だぜ 向こうはC++/CLIに固有の内容以外(C++や.NETの基礎知識)は基本的にスレチだし
398 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 21:42:40.23 ] int main() { int *array = new int[0]; delete[] array; return 0; } Visual Studio 2008搭載のコンパイラーでこのコード走らせると 異常終了してた気がするけど、もし異常終了したらバグじゃね? 仕様として正常終了と異常終了どっちが正しいんだ?
399 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 21:58:07.72 ] >>398 new が失敗→ bad_alloc → terminate() → abort() という可能性はあるが、 現実に VS が対象としてる Windows 環境でそうなることは考えづらいな。
400 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:00:21.06 ] >>390 メモリー不足→new_handler作動→リザーブが足りない→newが例外→直前にnewで確保したメモリーがリーク もしくは、 メモリー不足→new_handler作動→リザーブが足りない→newが例外を出さない→newが0を返す?→異常終了 メモリーリークとnewが例外出す以前は全く関係ない
401 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:01:47.57 ] >>399 俺Windows持ってないから、実際やったらどうなるか試してもらえるか? 正常終了したら正常終了したと教えてくれ。
402 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:10:53.15 ] new int[0] は合法。変える値もnull値とは限らない(配列の格納に必要な追加のメモリを要求することは実装上許されているので)。 …規格票はJISのページがアレなので、誰か英語の規格でも貼っておくれ^^
403 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:12:54.12 ] bad_allocが投げられるようなシチュエーションではもはや何をやっても大抵ダメ って書いてある本があったな Exceptional C++だったかな?
404 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:14:48.61 ] >>402 new int[0]が何を返そうがどうでも良いんだけどね。 どうせ0なんだから代入しないわけだし。 問題はdelete[]がnew int[0]で確保した何かを 削除して落ちるのが合法かというわけで。
405 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:17:32.68 ] >>404 勿論合法。>>398 もエラー無しの正常終了。VCでもエラーでなかったよ。
406 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:20:18.83 ] >>403 大抵はダメでも対処するケースはそれなりにある 可能な限りキャッシュを開放してロックを解除とかね プロセス外部にあるロックは鼓動が止まってから しばらく立たないと解除されないから、開放できるものがあるなら 最後の余力を使って可能な限り解放したほうがいい
407 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:21:29.08 ] >>405 de;ete[] new int[0];で異常終了が合法なの? りょうかーい。
408 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:25:00.40 ] 大抵は盛大にリークしまくりモードで焼け牛に水状態なんだけどな。 実装によっては開放した途端OSにボッシュートされてヨソにもってかれたりとかも。
409 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:29:37.55 ] Windows Me以前か、Windows以外のOSか? 基本的に ヒープが空 = アドレス空間に空きがない であって ヒープが空 = システムの記憶領域が足りない じゃないからな。後者だとプログラム以前にOSが止まる。
410 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:30:27.97 ] >>407 ちゃうねん。異常終了しないのが合法。
411 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:31:42.59 ] 焼け牛…そういえば、牛に衝突すると「モー」となくドライビングゲームがあってだな…
412 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 22:58:10.60 ] 若干スレチですが、 cmathのrand()って周期いくつか分かりますか?
413 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 23:00:29.78 ] 若干スレチですが、 cmathのrand()って周期いくつか分かりますか?
414 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 23:03:46.58 ] 2分弱かな・・・。
415 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 23:15:26.42 ] >>413 そんなもの存在しない
416 名前:デフォルトの名無しさん mailto:sage [2012/05/27(日) 23:26:07.12 ] C++11ならMT19937が装備されたじゃん
417 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 00:05:41.96 ] >>413 cmathの中にrandはない。他の場所にあるrandの周期は実装によって異なる。
418 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 00:15:04.79 ] randの仕様見たけど、ほとんど仕様ないんだな
419 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 00:24:54.98 ] 線形合同法だったり、なんかビット操作して128bit周期にしてみたりとか色々実装があるね。
420 名前: ◆QZaw55cn4c mailto:sage [2012/05/28(月) 03:46:04.96 ] 最近のはやりは、それでも基本線形合同、ただし表に返すのは上から半分
421 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 05:52:39.32 ] それは仕様がない
422 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 10:47:20.39 ] 土日に盛り上がってたんだな・・・ >>361 RAII(スマポ)使うかtry-catch(-rethrow)するか2択なんだし 両方しないのは単なる例外安全でないバグコードじゃね Fooがバグってるのに Foo「俺のせいじゃないです、bad_alloc投げたやつせいです」 それあんまりじゃね
423 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 12:00:15.12 ] >>403 どうしようも無いケースも多いだろうけど オンメモリで小さいテキストを処理する機能にクソでかいファイル渡すとか オプションで何かのバッファサイズに無茶な値を設定したとかあるし 対話型なら別にプロセス落とさなくても 入力ハンドラあたりでcatchしてエラー表示して続行でよくね
424 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 12:34:04.34 ] まったくだ。数ある「例外処理したくない」言い訳のひとつだろ。
425 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 14:26:54.15 ] >>423 画面表示もメモリ食うんじゃないのか?
426 名前:デフォルトの名無しさん mailto:sage [2012/05/28(月) 18:21:20.59 ] >>425 >>423 の2,3行目のケースならメモリ大量消費処理から 入力(\nやマウスイベント)ハンドラまでスタックが戻った時点で メモリは解放されてる(例外安全なコードなら) 戻って尚足りないなら、どうしようも無いケースってことで
427 名前:デフォルトの名無しさん mailto:sage [2012/05/29(火) 09:45:22.55 ] リソースが厳しい組み込み系以外で、 コンパイラオプションで例外を無効にしてる人っている?
428 名前:デフォルトの名無しさん mailto:sage [2012/05/29(火) 13:24:28.38 ] >>427 Google社員がそうじゃね?
429 名前:デフォルトの名無しさん mailto:sage [2012/05/29(火) 21:19:59.03 ] PSP、DS、360、Wii全部例外切ってやってた
430 名前:デフォルトの名無しさん mailto:sage [2012/05/29(火) 21:59:51.13 ] >>429 コンパイラー何使った?
431 名前:デフォルトの名無しさん mailto:sage [2012/05/29(火) 22:52:35.80 ] CODE WARRIOR
432 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 01:10:25.39 ] >>429 427 じゃないけど、なんで切ったのか気になるなー。 プログラムサイズ?実行速度?
433 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 04:20:14.38 ] >>431 それはコンパイラーじゃなくて統合開発環境じゃん。てのは置いといて、 CodeWarriorについて来るコンパイラーは、そもそもthrow-try-catchが まともに動かんだろ。
434 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 07:38:21.36 ] 例外切るとstd::stringやstd::vectorとかも実質使えないから ベターCとしてのC++になるのかな
435 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:05:44.79 ] STLも使えなくなるな いやまて例外を投げるメンバ関数だけ切ればいい話か
436 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:28:18.20 ] クラスのポインタって実体はあるの? class sub{ public: int aaaa; }; claaa sper{ public: sub* s; }; ↑特にこういう時
437 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:37:44.75 ] メンバへのポインタあるだろ (sub::**s)になるのかな
438 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:38:14.93 ] あ、ただしこれは単独では使えないからね インスタンスと組み合わせて使わないと意味をなさない オフセットのようなものか
439 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:46:53.93 ] sperをインスタンス化してもsubは不定かNULLポインタだな。
440 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:50:28.22 ] それはコンストラクタの初期化リストか他のメンバ関数でnewするしかないね 他の配列やPODなんかを指しても別にいいけど ただクラスはstaticメンバでない限り多数生成する目的なんだからやはりnewだろうね そしてデストラクタにはdeleteを入れる スマポを使うと楽だけどな
441 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 08:52:29.69 ] オブジェクトを作って配下の変数やクラスにもデータを入れているのに 初期化関数を抜けたらポインタで持たせているデータだけNULLになっていました。 char*とかがそうです。中身を持たせているのにも関らず消えてしまうのはなぜなんでしょうか?
442 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:00:09.20 ] 具体的に書いてみろや 文章だけじゃイメージ沸かない
443 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:17:17.40 ] >>436 こんな感じかなあ class sub { public: int aaaa; }; class sper { public: sub* s; }; int main() { sub* su = new sub; sper* sp = new sper; sp->s = su; int sub::*aa = &sub::aaaa; su->*aa = 1; std::cout << su->*aa << std::endl; sp->s->aaaa = 2; std::cout << su->*aa << std::endl; delete sp; delete su; }
444 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:42:39.53 ] クラスの配列をコンストラクタで初期化することってできますか? class test{ public: cObj* objArray[10]; test() : objArray[0](new cObj) {}; }; みたいな感じなんですが・・・・・
445 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:50:21.49 ] >クラスの配列をコンストラクタで初期化することってできますか? できる。
446 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:56:04.82 ] >>445 どうやって?
447 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:58:31.43 ] やればできる できないと思った瞬間にゲーム終了だ
448 名前:デフォルトの名無しさん mailto:sage [2012/05/30(水) 09:58:34.74 ] >>445 それできるのか? 知らんかった