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


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

【初心者歓迎】C/C++室 Ver.104【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2018/12/28(金) 06:04:52.38 ID:ufThBpcD.net]
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/

359 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 13:07:21.17 ID:qU4d2Hmv.net]
>>358
は?お前じゃあ江添より仕様に詳しくてC++のコンパイラを実装出来るような能力なのかね?ええ?

360 名前:デフォルトの名無しさん [2019/02/04(月) 14:02:36.47 ID:zmkNdOJF.net]
工学部生よりましやろ

361 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 14:08:27.48 ID:n76odGjc.net]
例え世界一の物知りでもそんな口の効き方をする人とは
付き合いたくないな
RMSにはEMACSやgccといった作品があるから許される

362 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 14:56:20.34 ID:iZ37iel0.net]
この3冊は、日本人が作った神の書。
皆、基地外。基地外しか、こんな本を書けない

Linux プログラミング・インタフェース、Michael Kerrisk、2012

この本は、神の書と言われていて、翻訳本は日本しか出ていない。
著者は10年、man-pagesを書いてきた人で、翻訳者・アドバイスの千住治郎も、技術者

C++11/14 コア言語、江添 亮、2015

組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006

ドワンゴ江添は需要があれば、テンプレートの本を出そうか、なんて言ってるけど、既にこの本がある

C++テンプレートテクニック 第2版、
επιστημη(えぴすてーめー)・高橋 晶、2014

363 名前:デフォルトの名無しさん [2019/02/04(月) 15:06:30.08 ID:zmkNdOJF.net]
ステマ宣伝乙
5ちゃんでは禁止

364 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 15:58:27.96 ID:n76odGjc.net]
Linuxの黎明期にman page 書いていたのは janneさん事、中谷千絵さんだよ
エピスメーテーさんは昔っから雑誌に記事を書いていたな
The Basicだった?

真ん中の人は知らないけどどんな貢献をしたの?

365 名前:はちみつ餃子 mailto:sage [2019/02/04(月) 16:09:06.48 ID:kMmgpke2.net]
>>364
ざべは読んだことないけど、Cマガでεπιστημηの名前はよく見たな。
今では Teratail で C++ の質問をするとたまに回答者として出現するよ。

366 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 16:27:32.33 ID:n76odGjc.net]
>>365
そうでしたか、CUJJとかは買っていたけど...CMAGは
時々だったので

367 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 17:40:44.94 ID:Y0slw8we.net]
>>362
えぴすてーめーと高橋のC++テンプレ本は神だわ。
なんというか、読者に理解させてあげたいという熱意が伝わってくる
江添とは大違い
江添にお布施するつもりは毛頭ない。死ねばいいのに



368 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 17:42:39.71 ID:Y0slw8we.net]
>>359
本人様のご登場wwww

369 名前:361 mailto:sage [2019/02/04(月) 18:14:10.83 ID:iZ37iel0.net]
>362 の3冊は、単なる規格の文章ではなく、それをソースコードの実例にした所がすごい!
だから、プログラマーは皆、Kerrisk の本を枕にして寝ろって、言われている

たぶん、江添やMISRA‐C の本も、外国で発売されていれば、大絶賛されるはず!

370 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:01:28.11 ID:GH1lEwiX.net]
エピスや高橋ageて江添sageってのもよくわからんな
立ち位置違うし江添は委員会の人間だから
仕様や提案について素晴らしいとかクソとか言う権利や責務がある
それをsageるってことは「現行仕様マンセー、標準規格に欠点など無い!」みたいなことか?

371 名前: mailto:sage [2019/02/04(月) 19:11:50.08 ID:CLpqTC7n.net]
>>362
エピさん単著は買わないですね、エピさんの文章は今の言葉で表現するとすれば「ポエマー」が近い

同じくポエマーに分類される私がいうことではないのですけど…

372 名前:361 mailto:sage [2019/02/04(月) 19:22:56.32 ID:iZ37iel0.net]
元々は、Kerrisk も、江添やMISRA‐C のメンバーも、
規格をソースコードの実例で、表示してやろうという、とんでもない企画!

よく規格厨みたいな香具師がいて、企画書を読めって言うけど、
文章で書かれてもわからないし、全く出来るようにならないから、業を煮やして書き始めた

こんな面倒くさいことを、何年も掛けて書くかね?

こういうのは、忍耐力がある日本人が得意なんだろう。
外人は、まずやらない

373 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:24:18.62 ID:n76odGjc.net]
MISRA はBOSCH を引き込み損なった時点で絵に描いた餅でしょうね
デンソーが勝利すれば勝ちの目も出て来るかもしれないが

374 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:29:03.26 ID:Y0slw8we.net]
>>372
>規格をソースコードの実例で、表示してやろうという、とんでもない企画
いや言語の解説本は規格をわかりやすく、ソースコードを例示して解説するでしょ。
それがなければ、規格だけでいいわけで、解説にならない。

わかりやすく書こうとしてるけど、そこの熱意の持ち方と、おつむのレベルでほんとにわかりやすいかどうかが問題なんだろ。

375 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:32:47.98 ID:GH1lEwiX.net]
そら商業目的の本だったらわかりやすく書くの当たり前だろ
江添の本は読んだことないから分からんけど
売られてる本とブログで比較してないか?

376 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:36:24.60 ID:Y0slw8we.net]
>>372
>こういうのは、忍耐力がある日本人が得意なんだろう。
>外人は、まずやらない

K&R も Stroustrapも規格になるまえからやってますがな
ソース示してこつこつと。

何もプログラム言語だけじゃないわ。人に説くこと、伝道師のようなwriterは日本人よりむしろ、英米人に多い。
クヌースの The Art of Computer Programmingあたり読んでみ。

377 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:46:25.23 ID:Y0slw8we.net]
>>375
反響見て、読んだやつにバグだしさせてたあとブログ印刷物なり、ebook販売するんだから
金取ろうが、無償でやるかはどーでもいい話
日本語のコンピュータ書籍なんて販売数からしてとてもとてもメシ食えないから
ほぼ実益のないめんどくさいだけの作業
ブログでわかりにくければ本になってもわかりにくいことは保証する



378 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:48:43.30 ID:9WmylojK.net]
クヌースの4-1巻目は、かなりの分量をZDD/BDDの説明に割いていて
このアルゴリズムは北海道大学で日本人が考えた物だね

で、その江添さんという方はどの様な技術貢献をしたの?

379 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 20:02:32.24 ID:Y0slw8we.net]
>>378
警察に喧嘩売って訴訟おこしたこと以外知りませんがな
きちがいの所業なんざ

380 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 20:32:13.56 ID:GH1lEwiX.net]
まぁC++テンプレートテクニックがわかりやすい良書なのは同意するけど
高橋晶ってたまにテクニックのメリットを語るときに
デメリットに気づいてない(またはスルーしてる)ことがあるんだよな
わかりやすくても鵜呑みには出来ない

381 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 20:36:58.42 ID:Y0slw8we.net]
ま、江添が好きならどーぞご勝手に俺は願い下げってだけ

382 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 20:39:36.21 ID:GH1lEwiX.net]
好きとは言ってないよ
結局役に立つ&正確な情報を書いてるかどうかが全てだ

383 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 20:41:05.88 ID:GH1lEwiX.net]
というか江添のブログでも「あれ?おかしくね?」みたいなことあったから
どっちがどうとも言えないけど

384 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 21:00:45.66 ID:Y0slw8we.net]
だいたい

ドマンコ

とかいう社名が下品すぎる

385 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 22:23:14.32 ID:ZVfvG47Q.net]
>>365
毎月題材がカウンタークラスの人…

386 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 23:23:10.64 ID:Y0slw8we.net]
https://qiita.com/dc1394/items/d2b8de600a304664cdb5
実に参考になった

387 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 23:47:34.63 ID:xjVdC68S.net]
型指定するのが嫌だから最初にautoを使うc++入門書籍を書こうとしてたり、
まともにプログラム開発してたら最新の仕様を追えないので開発しないとか言い出す奴とか
普通の精神してりゃ信用せんわな。
根本的にありゃ馬鹿だよ。



388 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 23:59:20.89 ID:GH1lEwiX.net]
>まともにプログラム開発してたら最新の仕様を追えないので開発しないとか言い出す奴とか
江添みたいに標準化委員会に属してたら正しいと思うけどね
何もコミュニティに貢献しない趣味グラマだったりライターでもない奴が言ってたらアホだが

389 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 01:34:09.47 ID:PwKFrksX.net]
趣味グラマにドワンゴが給料払ってるんだろwww

390 名前:デフォルトの名無しさん [2019/02/05(火) 06:14:00.98 ID:sYtbTM3p.net]
すみません
n秒ごとに関数foo()を繰り返し実行するような、かつ「低負荷な」方法を教えてください。
n秒は、精度はだいたいでよくて、たぶんnは600(つまり10分)程度にしたいと思っています。

windows 10 で、gccで最新の標準C++ とboost C++ が使用可能です

よろしくお願いいたします

391 名前:はちみつ餃子 mailto:sage [2019/02/05(火) 06:20:20.09 ID:VmiK9YL/.net]
>>390
SetTimer API を使って WM_TIMER イベントの発生を待つのが妥当な方法だと思う。
イベントが発生するまでは何もせずに待つだけなので低負荷。

392 名前:389 [2019/02/05(火) 06:57:10.23 ID:sYtbTM3p.net]
>>391
windows API をつかう方法で行ってみます
ありがとうございます。
標準C++ で導入された
thread とchrono を用いて、while (1 )を回すという方法がGoogle検索で 出てきますが、低負荷な方が良いので、windows API で行ってみます。
ありがとうございます。

393 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 07:12:26.12 ID:kZRbw8C2.net]
whileは単なる無限ループじゃなく、スレッドが立ち上がるまで、sleep で CPU を眠らせてるんじゃないの?
whileだけだと、負荷かかるし、sleep一発だと、繰り返し待ちできないから

394 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 07:23:19.83 ID:kZRbw8C2.net]
https://ja.cppreference.com/w/cpp/compiler_support
gccは並列STLまだ実装できてないんだな。がかーり
C++2xは後回しでいいから先に実装してもらいたいな
msvcがしらん間にgccを上回るC++17準拠状況になってるんだな
msがかなり頑張ってるのがかなり意外

395 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 10:24:17.44 ID:Jquzc2Ph.net]
趣味グラマーって本職が焼そば職人だっけ

396 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 10:36:43.43 ID:PCiHKxWL.net]
MSが標準をわざと外して潰し合う戦略を取ってたのは遥か昔
今は協調してシェアを取り込んでから独占する戦略がメイン

397 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 13:32:56.11 ID:HSCecGQW.net]
>>395
ブロガーで良くね?



398 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 18:47:37.04 ID:VoURnPvV.net]
スパゲッティーでは?

399 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 21:03:29.46 ID:6rjCuhxB.net]
>>397
つ ttps://cpplover.blogspot.com/2016/05/2016.html

400 名前:デフォルトの名無しさん mailto:sage [2019/02/06(水) 08:14:04.23 ID:QvJUH+Yd.net]
>>395
Oishii Sru Paの話?

401 名前:デフォルトの名無しさん mailto:sage [2019/02/07(木) 11:49:12.65 ID:nCm+DDSJX]
【製作中 の wasm(WebAssembly)/MS Windows 共通の Window System】

nowsmartsoft.atwebpages.com/


ひきこもりの L より。

402 名前:デフォルトの名無しさん mailto:sage [2019/02/07(木) 12:01:48.93 ID:nCm+DDSJX]
>>401
何日か前から5chで公開した(「つもり」だ)けど、Ninja Analyzer によれば、そのリンク先
を訪れたユニークユーザー数は、今のところ「1」。

どうなってるの。

403 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 10:04:34.12 ID:Js3eMSlM.net]
6
だまれ朝鮮人
失せろ

404 名前:デフォルトの名無しさん [2019/02/09(土) 13:43:15.52 ID:n731AUSx.net]
Class TA{
public:
TB B;
}
Class TB{
・・・
}
Class TA::TA(){ //コンストラクタ
B = new TB;
}

で、TAのデストラクタが走った時点でBも一緒に消えるんですかね。
それともTAのデストラクタで delete B が必要なんですかね。

405 名前: mailto:sage [2019/02/09(土) 14:02:51.11 ID:1JWnTnfH.net]
>>404
new したのなら delete は必ず書かないといけない
https://ideone.com/z0IYgT

406 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 14:24:00.17 ID:6TG0Gkwe.net]
必ずというわけではないよ

407 名前: mailto:sage [2019/02/09(土) 14:36:03.78 ID:1JWnTnfH.net]
>>406
理解はしますが薦める気にはならないのです…



408 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 15:47:27.40 ID:YAWSonmT.net]
>B = new TB;

エラーになるんじゃね?

409 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 16:20:31.91 ID:NnmcfWng.net]
>>408
それぐらいは忖度してやれよ

410 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 13:20:38.44 ID:MWi64iyD.net]
メンバ変数にクラスを持つときはポインタ型にしてコピーコンストラクタを作るべきですか?
それともクラスの実体を持たせても大差ありませんか?

411 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 13:21:20.82 ID:XMMc9iis.net]
クラスと用途による

412 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 13:40:02.39 ID:Ix0Ul5tp.net]
実体で用が足りるならすべて実体でよい
効率云々はまず一通り動くものが出来上がった上でそこが問題になってから考えろ

413 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 13:41:09.49 ID:MWi64iyD.net]
わかりました
ありがとうございます

414 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 14:15:19.12 ID:0+1G/wKU.net]
値型とエンティティを意識して作って下さい
エンティティはスマポで管理、値型は実体を持たせるべきでしょう

415 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 14:26:23.71 ID:KPch74RC.net]
エンティエィって何?
定性的な定義を頼むわ

416 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 14:30:03.09 ID:0+1G/wKU.net]
>>415
インスタンスがアイデンティティを持つならエンティティ

417 名前: mailto:sage [2019/02/10(日) 15:14:36.29 ID:nGIVWkyn.net]
>>416
実数はエンティティですか?
符号付整数はエンティティですか?



418 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 15:16:29.18 ID:sKzQuR0e.net]
あーやだやだ
こういう宗教じみた設計論語るやつ

419 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 15:16:40.47 ID:0+1G/wKU.net]
>>417
値です

420 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 15:17:40.51 ID:0+1G/wKU.net]
>>418
現実を見据えて追求すると自然と出てくる答えです

421 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 16:25:18.62 ID:scT3207q.net]
親クラスとライフサイクルが同じか数値型なら実体、そうでないならポインタでいいだろ。

動的確保よりコピーやmoveのほうがコストが低い場合とか検討の余地はあるけど、考えすぎると禿げる。

422 名前:デフォルトの名無しさん [2019/02/10(日) 16:31:34.44 ID:25jgEgQt.net]
>>404
デストラクタは virtual に汁

423 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 20:26:50.17 ID:EWmLbbO6.net]
どうせそこまで最適化も厳密なメモリ管理も必要なプログラムじゃないだろ。

424 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 21:57:11.00 ID:sKzQuR0e.net]
>>420
ほらね、こういう精神論がでてくる

425 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 01:02:52.04 ID:QKPibkAC.net]
組み込み以外に使い道あるんですか?

426 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 07:24:34.72 ID:KN5ZTrY9.net]
OS作ったり、ブラウザ作ったり、3Dバリバリのゲームを作ったり、他の言語向けに機械学習や科技計算等のライブラリを作ったり、いろいろあるよ

427 名前:デフォルトの名無しさん [2019/02/11(月) 12:01:51.83 ID:itY+kGJR.net]
RubyはC++が嫌いだからCで書かれている



428 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 12:06:46.94 ID:QKPibkAC.net]
>>426
天才達だけに許された言語なのでしょうか?
もっと身近なプロダクトはないんですか?

429 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 12:32:11.46 ID:PRVQuzHN.net]
古い例だとニコニコ動画がC++
まあおかげで開発がスケールせずオワコン化したわけだが

430 名前:デフォルトの名無しさん [2019/02/11(月) 12:32:14.48 ID:itY+kGJR.net]
the door is open

431 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 12:43:40.65 ID:MmPS3pUZ.net]
>>428
聞いてばっかりじゃなくてお前がどういうものを探しているか書いたら?

432 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 13:10:19.37 ID:Y0EVtjJ+.net]
CADとか画像処理とかビット演算系アルゴリズム(cf.ZDD)なんかは
まだまだ他の言語には負けないね

433 名前: mailto:sage [2019/02/11(月) 13:44:01.42 ID:HT+vwAFW.net]
>>429
>開発がスケールせずオワコン化した
これってどういう意味ですか?

434 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 13:51:23.27 ID:awXFg/MG.net]
JavaからC++勉強中です
C++の場合、他のクラスのオブジェクトを複数持たせるときは、一般的にどうするんでしょうか

・コンテナにオブジェクトそのものを突っ込む(一番わかりやすいけど、ムーブの定義忘れとかでミスが出そう)
・コンテナにオブジェクトへのポインタを持たせる(コンテナ解放時に、クラスごとに同じようなメモリ解放処理書くのかしら)
・コンテナにポインタをスマートポインタで持たせる

辺りをネットで読ませてもらいましたが、こんな感じで良いんでしょうか?
不勉強な上、他のオブジェクト持つという基本的なことなので、なんかもっと簡単な方法を見落としてる気がしてしまいまして

435 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 13:54:24.78 ID:QKPibkAC.net]
>>434
時と場合によりますので一般的な答えはありません

436 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:06:14.14 ID:fD0IDjkv.net]
>>434
Javaのオブジェクト参照はC++のポインタに該当する。
C++のオブジェクトは、型を持ったバイト列だと考えていい。
C++で自動変数を宣言すると、スタックにバイト列が割り当てられる。
newやスマポやコンテナを使うと、ポインタによりヒープでメモリーが割り当てられる。
ポインタも型を持ったバイト列。ポインタは配列のように周りのメモリーにアクセスできる。
C++のクラスは構造体に関数群を追加したもの。C++でクラスを継承すると、関数群とバイト列を引き継いだサブクラスになる。

437 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:12:14.41 ID:0TxoCFW6.net]
>>434
大体、その3つの通りで、そこに述べられたものの上から優先的に選ぶ。
つまり、普通にメンバ変数にオブジェクトとして宣言するのがC++では
最も効率が良くて伝統的な書き方。それでは問題が生じる場合にオブジェクトの
ポインタとして持たせる。スマートポインタは後になって導入されたもので、
人気があるものではないので無視して良い。

二番目のポインタとして持たせるのは、例えば、今定義している最中の
クラス(自分自身)と同じ型のデータで、子どもや親にあたるデータへ
リンクを作りたいようなときか、または、ある基本クラスを継承した
色々なクラスのオブジェクトを持ちたい場合に用いる。



438 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:16:41.10 ID:fD0IDjkv.net]
C/C++では、sizeofキーワードを使えば、簡単にvoid以外の型のサイズがコンパイル時に取得できる。Javaではオブジェクトのサイズを簡単に取得することはできない。
C/C++はよくオブジェクトのサイズやバイトの並びを意識してプログラミングする。

439 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:17:25.55 ID:a3vDiVrE.net]
結局CのポインタってJavaとかの言語で表すなら何なんだ?

440 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:23:20.42 ID:fD0IDjkv.net]
なぜなら、例えばスタックに巨大なデータを割り当てると、スタックオーバーフローというエラーが発生するし、
ヒープだって、巨大なデータの割り当ては失敗することがある。
また、構造体を変更すると、構造体のサイズやデータ構造が変化して、互換性の問題が発生することがある。

441 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:24:23.31 ID:awXFg/MG.net]
>>437氏他
丁度今、ウェブ上のC++で書かれたCompositeパターンのソースを読ませて頂いてました
正に2番目で実装されてましたが、都度メモリ解放処理書くくらい当たり前なんですね、流石C++です

独学なもんで、こうはっきり言ってもらえると本当にありがたいです、使い分けて行きたいと思います
他の皆様もありがとうございました、勉強になりました

442 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:34:10.39 ID:fD0IDjkv.net]
>>439
Javaの動的配列はCのポインタに近いが、Javaの配列では危険なアクセスは制限されているし、参照カウントで管理されている点が異なる。
Javaのオブジェクト参照は、参照カウントで管理されており、C++の構造体/クラス型に対するstd::shared_ptrに該当する。

443 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:37:16.50 ID:BEdrdhIs.net]
しかし、std::shared_ptrはヌルポを指定できるが、Javaはできない。

444 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:49:43.57 ID:0TxoCFW6.net]
>>441
C++ は、デストラクタに必ずメモリ解放処理を書いておけば、そんなに
メモリーリークを気にすることはない。多くの場合にはそれで完全に処理できるから。

次のように書くだけで、ほとんどの場合、メモリーリークは起きない:
class CMyClass {
 BYTE *m_pBuf;
 CMyClass() {  // コンストラクタ
   m_pBuf = NULL;  // メモリをまだ未割り当てであることをマークするためにこうしておく
 }
 ~CMyClass() {  // デストラクタ
  if ( m_pBuf != NULL ) {
   delete [] m_pBuf;   // メモリの解放
  }
 }
}

445 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:52:47.12 ID:dGdUrFsa.net]
すごく古い書き方だ

446 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:54:57.57 ID:BEdrdhIs.net]
>>444
ナマポの場合、代入したらまずいよ。例外安全にも問題があるし。

447 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:55:46.62 ID:DnOcmNTU.net]
確かに、人に教えるレベルじゃないね



448 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:56:36.09 ID:0TxoCFW6.net]
>>444
正しくは、次のようにアクセス制御のための「public :」を書かないといけない。

class CMyClass {
protected :
 BYTE *m_pBuf;   // 高速化のため、自動的には初期化はされないのでコンストラクタで初期化する。
public :
 CMyClass() {  // コンストラクタ
   m_pBuf = NULL;  // メモリをまだ未割り当てであることをマークするためにこうしておく
 }
 ~CMyClass() {  // デストラクタ
  if ( m_pBuf != NULL ) {
   delete [] m_pBuf;   // メモリの解放
  }
 }
}

なお、必要に応じて、コンストラクタの中で、m_pBuf = new BYTE [xxx]; のように書いても良い。

それと、BYTE は、「オブジェクト」ではないので、あなたの書いているような場合には、
BYTE *m_pBuf の部分を CSomeObject m_pObj; のように変えて、m_pObj = new CSomeObject;
のようにする。

449 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:58:34.69 ID:BEdrdhIs.net]
>>448
ダメだこりゃ。

450 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 15:03:05.98 ID:MkFOBvt9.net]
良い子のみんなは>>444の危険性が理解できるまではスマートポインタを使ってね
おじさんとのお約束だよ

451 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 15:11:57.93 ID:Qk3j4qw0.net]
>>448のデストラクタでnullチェック必要?
nullポインタをdeleteしても問題ないはずだが
二重解放防止にはならんし意味わからん

452 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 15:18:49.80 ID:BEdrdhIs.net]
>>451
超独自仕様の組み込み開発とか、メモリー管理がbuggyなプログラムでは意味があるらしい。
例えば解放したメモリーブロックをアクセスするような行儀の悪いプログラムでは意味がある。

453 名前:はちみつ餃子 mailto:sage [2019/02/11(月) 15:19:34.89 ID:eS7AzULV.net]
>>444 >>448
・ 初期化を初期化リストでやらずに代入でやるのは邪悪。
・ delete に NULL を渡した場合には何もしないことが保証されているので、
  無駄にヌルチェックする必要はない。
・ ポインタ型や整数型の値もまたそういう型の「オブジェクト」である。
  (元質問者が Java から入ってきてるから「Java の用語で言うところの」という意味?)

454 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 15:19:51.73 ID:3tLemvMU.net]
初心者なので確認
コンストラクタの中に飛び込む前のメンバの初期化で例外発生したら m_pBuf は中途半端になるから
コンストラクタの中で代入するんじゃなく、メンバ初期化子で初期化しろ
という認識でいいのかしら

455 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 15:29:14.84 ID:BEdrdhIs.net]
>>454
「C++ 例外安全」でググれ。ナマポを使わずに、素直に生配列、コンテナ、スマポのどれかを使えば済むこと。マネージされてないナマポは村八分にしろ。

456 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 15:39:02.97 ID:3tLemvMU.net]
なんとなくわかった   ような気がする
生ポそのものはコンストラクタもデストラクタに何ら操作しないから宙ぶらりんこになるのか

457 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 15:41:57.41 ID:dGdUrFsa.net]
ちょっち理解は大変だけど生ポはスマポにドンドン置き換えたい



458 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 15:43:11.94 ID:BEdrdhIs.net]
スマポならコピーコンストラクター・代入のややこしさからも解放される。

459 名前:はちみつ餃子 mailto:sage [2019/02/11(月) 15:52:25.23 ID:eS7AzULV.net]
まあまあ。
スマートポインタを活用しろというのはその通りだが、
ポインタ (や例外機構) を理解せずに
思考停止してスマートポインタを使うのはあかんやろ。

ここの元質問者はまだそこを理解しようとしている
ところなんだから、スマートポインタを使わなかった場合にどう書けば良いのか、
きちんと書くと面倒くさすぎるという体験も必要だろ。






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

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

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