C++は難しすぎ 難易度:4
■ このスレッドは過去ログ倉庫に格納されています
ポリモーフィズムを使うとき、デストラクタにvirtual付け忘れると
場合によってはメモリリークして大変な事になる
サブクラスをdeleteした時に
スーパークラスのデストラクタしか呼ばれない
この罠に引っかかった奴は多いに違いない >>586
とにかくデストラクタにはvirtual付けるようにしてる。 今ほど継承の問題点が言われていなかった過去の常識という印象。 virtualなデストラクタが必要なのは、上に言われてる通りポリモーフィズム使う時だけなんやで
基底クラスのポインタに派生クラスをまとめて管理する(基底のポインタからdeleteする)んでなければ
virtualにする必要は無いんやで
でないと、vtblを持たない、メンバ変数の通りの内容(パディングが無ければ、サイズもメンバの合計に等しい)
しか持たないクラス/構造体とか作れないしな。
継承の問題点って具体的にどの辺?自分にはちょっと想像つかんかった 継承(is-a)は、構造が硬直化する。柔軟ではない
一方、包含(has-a)は柔軟で、処理の委譲(丸投げ)にも使われる。
依存性の注入(DI)も、最近の流行 世間でそう言われているという話ならコピペでも不思議はなかろう。 >>590
has-aの関係だと言えるものならそうすべきだけど、is-aの関係を包含でやると
そのうち必ず破綻するよ? まぁ多態しないならデストラクタを仮想関数にする必要ないってのはその通りで
shared_ptrなんかはダウンキャストしても正しいデストラクタが呼び出せるように
ポインタ自体がデストラクタを持ちまわってるし、知らなきゃ驚くようなことをしている
が
そんなことより、C++が雑多だっていうなら
筆頭は多重継承、ダイヤモンド継承だろ
だーれも使ってない機能、goto以上に誰も使わない、盲腸のような機能
ここから読み取れるのは、つまりは要らない機能は使わなければよい
ってのがC++の流儀であり習わし
今に始まったことではない、昔からそう 多重継承のダイヤモンド継承がどれぐらい使われないかというと
明らかに問題があってめちゃ複雑なのに
ここで例に上がらないぐらい誰も使ってないし
すっかり忘れて頭から抜け落ちるぐらい使われてない
使ったこともないから困ったこともない、そんぐらい使われてない
こんな使ってはならないような機能を持っている言語なんだから
使う側で工夫するしかないのだわな ちなみに仮想継承なんか、実用的なプログラムで使ったことあるやつ居るのかね
コンパイラ開発者がかわいそうだよ
実装が面倒くさそうなのに誰も使わないんだから NVIインターフェースを複数継承するみたいなクラスはよく書くから多重継承がないと困る
そして、スマポが持ってるのはデストラクタではなくてカスタムデリータでしょ?
RAIIのためのデリータを指定するのと、ポリモーフィックなクラスのデストラクタを仮想にすることは独立だと思うけど ん?
オブジェクト志向バリバリだと、普通に多重継承起こるでしょ?
「インターフェースクラスの」ではあるけど。 >>598
インターフェースかどうかはどうやってジャッジするの? 子供の発表会みてるような微笑ましさがあるな
ID:MWDK7HMBのことな インターフェースの多重継承は否定してないって言ってるのになぁ
インターフェースの多重継承は他言語でも見かけるけど
C++の場合は実装の多重継承も出来て、これはJavaやC#では禁止されているわけだけど
CにOOを追加したのがC++の売りであるから、継承は筆頭株主というか鳴り物入りというか
当時としてはCに対するアドバンテージで、売りであったはず
そこでマズったのはハッキリ言ってかっこ悪いが
いらない機能は使わなきゃ済む話、それがC++
仮想継承とか誰が使うの?ってね
gotoより使わないし、gotoより害悪 江添亮とかいうやつやたら偉そうだけど
C++界になんか貢献したの? Linux プログラミング・インタフェース、Michael Kerrisk, 千住 治郎、2012
C++11/14 コア言語、江添 亮、2015
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
神の啓示を受けし者たちが記した、神の書。
この3冊が出版されているのは、日本だけ
皆、これらの本を持って、山ごもりするw >>606
俺は江添氏のブログで助かってるけどなぁ
新しい仕様を実践的に教えてくれるのでわかりやすい
対してメタプログラミングやらコンパイル時のポリモーフィズムやらを
「今どきのC++の使い方」とばかりに押し付けてくる風潮がうざい(ああいうのはアマチュアの意見だと断言できる)
アマチュアが言ってるのはわかるけどC++系のライターにまでそういうバカが居るから困る
誰とは言わんけど >>607
1番目のはLinuxシステムプログラミングと内容が似てるみたいだけどそっちのが良いの? >>594
標準ライブラリをはじめ多重継承は至るところで使われてるし、禿4にも、真のC++使いは恐れなく多重継承を使うと書かれている。
個人的には多重継承を避けてきたのだが、そろそろ使ってみようかと思う。
昔のgoto危険みたいな話なのかも。
使った方が良い場合は確かにあるので。 禿4によると過度の総称型も良くないらしい。
よくありがちなObject型ってやつ。 >>611
多重継承が一番いいと思ったらためらいなく使うわ
gotoも同様にね、まあ、これはgotoの出番かーと思っても
やっぱり必要なかったなとなるんでgoto使う機会は今のところないな >>609
「Linux プログラミング・インタフェース」の著者、
Michael Kerrisk は、Linux man ページを、10年書いてきた人。
世界中の開発者から、神と崇められている!
開発者は、この本を枕にして寝ろ、と言われている
この本に似ている本は、
詳解 UNIX プログラミング 第3版、2014 C++テンプレートテクニック 第2版、
επιστημη(えぴすてーめー)・高橋 晶、2014
επιστημη も、C++標準化委員会の会員
江添も、テンプレート・メタプログラミングの需要があれば、
本を書きたいって言ってたけど、既にこの本が出ている 江添はそいつらよりちょっと頭が悪いからまともに見えることもあるってだけだな。
本質は変わらん。 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
LNCSZ 屋上屋を架す形での仕様の肥大化が続いてもう巨大迷宮みたいな言語
理解してるって自信があるのはコンパイラ開発者や規格策定者だけじゃないかってレベル
いやそれさえも怪しいけど
そんな言語を一介のユーザーが進んで使いたいなんて思うわけがないよね K&Rを再読したんだけどさ…
スタックVMの作り方だろこれ。
「足りない分は自分でつくってね」という。
それで出来たのがjava,ruby,python。
禿に騙されて寄り道するなよ。 知れば知る程嫌いになる言語C++
パフォーマンスを維持したまま互換性を維持したまま言語仕様を肥大化して
コード以前に言語が汚くなっているC++
COBOLと同じ負の遺産C++ javaとか気持ち悪いよね
オブジェクトの中身弄くるのか分からなさすぎて 無料の処理系があるかってことなら「ある」。
例えば Linux 上で gcc 使えば無料だよな。
流石にコンピュータ本体までタダで入手できるとは言わんけど。
C++ のコンパイラを作って売る商売をする場合でも、
どこかとライセンス契約するような形でお金を取られることはないみたい。
『C++の設計と進化』にそんな感じのことが書いてあった。
正式な規格の本はスゲー高いらしいが、よく知らん。 スレが立ってから10年経過してるけど、まだやってるんだ。
最初の方を読むと、これじゃC++なんて無くなる勢いで貶されてるけどまだあるね。 javaのfinalもそうだけど
finalやconstだらけで眩暈がするというか
凄くゴチャゴチャした感じがして嫌 いまどきのES7/TypeScriptだと、ほとんどの行にconstかawaitかあるいはその両方が書かれる。 もう少し
abc(const: int i,int j)
みたいな事くらいいえねぇのかよ
やたら省略が好きなくせに ■ このスレッドは過去ログ倉庫に格納されています