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/
306 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 19:21:00.33 ] 多機能ではなくスマートさを追求したユニークさんこそ至高
307 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 19:33:51.01 ] >>297 会社がboost使わせねェんだから仕方ねぇだろ
308 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 19:41:03.98 ] >>307 scoped_ptrくらいなら定義すればいいだろ
309 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 19:43:11.82 ] >>307 内製の糞ライブラリ使うしかないのかwww
310 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 19:49:48.85 ] 社員の腕前まるっとまとめて信用されてないんだろ 紐付けとかないとなにやらかすかわからん集合無知みたいな
311 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 20:03:22.59 ] タダより高いものはないとか言ってセキュリティがうんぬん
312 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 20:10:06.48 ] じゃあ、コンパイラから全部内製で。
313 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 20:12:18.61 ] 単にboost分からないから使わせないだけだよ
314 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 20:13:50.23 ] じゃあ標準ライブラリは完全にわかってるのか。すごいなぁ。
315 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 20:19:58.86 ] const auto_ptr ぐらいは使えるだろ
316 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 20:24:12.06 ] というかC++だって完璧にわかってるやつなんてそうそういねぇよ
317 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 20:50:09.14 ] C++はあのPL/Iよりも言語仕様が大きいんだぜ 全部覚えたら神様と崇めるよ
318 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 20:58:47.74 ] std::vector<Hoge>でHogeをコピーしないでHogeのデフォルトコンストラクタ呼び出す方法ありますか?
319 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:02:10.59 ] ソースで示して
320 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:06:08.79 ] >>318 resize
321 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:07:54.55 ] C++11より前だとコピるぞ。
322 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:08:02.54 ] resizeでコピーが発生せずデフォコンで構築されるのはC++11から
323 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:31:17.40 ] >>307 どんな理由で禁止されてんの?
324 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:45:46.59 ] 上司「今の僕には理解できない」
325 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:47:35.90 ] 上司「うちはBCC使ってるんだけどコンパイル通らないじゃんあれ」
326 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:47:36.00 ] 「なぜあなたが理解できないということが禁止の理由になるのですか?」
327 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:47:46.73 ] >>323 テンプレが役に立たなかった時の名残
328 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:49:27.89 ] >>327 なら今はもう問題ないな。
329 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:50:34.36 ] VC6が未だ現役という・・・
330 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:51:37.50 ] boostのコンパイルが通らない環境の仕事つい最近まであった
331 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:53:21.90 ] 先輩「STLも禁止な」
332 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 21:55:01.37 ] 俺様「OTL」
333 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 22:13:36.61 ] Oresama Template Library
334 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 22:26:00.18 ] 先輩「templateも禁止な」 俺「それC++を使う意味なくないっすか?」
335 名前:デフォルトの名無しさん mailto:sage [2012/05/25(金) 22:26:55.36 ] C99非対応の処理系ならベターCとして十分実用性が おっとMicrosoftの悪口はそこまでだ
336 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 00:23:07.53 ] >>334 3〜5年前なら当たり前のようにそういう話があった 今でも少なくない
337 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 00:34:43.34 ] そうだな、昔も今もアホは居るからな。
338 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 01:21:21.23 ] もっと昔だと・・・templateは予約語だった
339 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 01:25:34.85 ] mapに特定のキーが登録されているかいないか調べる方法ありますか
340 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 01:27:44.73 ] find
341 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 01:30:26.65 ] count
342 名前:デフォルトの名無しさん [2012/05/26(土) 02:09:27.73 ] VS2010を用いているのですが、コントロールがクラシックデザインなのはどうしようもないんですか?
343 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 02:13:27.57 ] >>342 ttp://eternalwindows.jp/control/controlbase/controlbase09.html
344 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 02:46:18.77 ] >>313 コンパイラが変わると、コンパイルが通らないからだよ。 ビルド環境にboostがあるとは限らんし。 早くboostがstlになればいいんだよ。
345 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 02:51:18.55 ] 糞環境自慢されても
346 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 03:05:38.09 ] 業界標準以外は導入しづらい
347 名前:デフォルトの名無しさん mailto:sage [2012/05/26(土) 07:27:02.37 ] >>294 遅レス&&全レス読んでないが、関係はある クラスFooのコンストラクタ内で例外が発生すると、 その時点で構築済みメンバのデストラクタはもれなく呼ばれるが Fooインスタンス自体のデストラクタが呼ばれない したがって、Fooがメンバとして単純なポインタFoo::m_pを含んでおり、 それに対するnewが成功した後に(別のnew等で)例外が発生すると Foo::m_pが指すメモリを解放する奴が居ないからリークする 解決策はFoo::m_pのような奴を生のポインタではなくauto_ptrにするとか
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 大抵はダメでも対処するケースはそれなりにある 可能な限りキャッシュを開放してロックを解除とかね プロセス外部にあるロックは鼓動が止まってから しばらく立たないと解除されないから、開放できるものがあるなら 最後の余力を使って可能な限り解放したほうがいい