仮想と非仮想とは? わかりやすく解説

仮想と非仮想

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/29 19:11 UTC 版)

メソッド (計算機科学)」の記事における「仮想と非仮想」の解説

C++では、一般に仮想関数コンパイル時にどのメンバー関数呼び出すかを確定できないため、通常の仮想メンバー関数呼び出しよりもパフォーマンスが悪いというデメリットがある。そのため、パフォーマンスを気にするC++プログラマには、継承する必要がないクラスメンバー関数(特にデストラクタを含む)にvirtual修飾子をつけることを非常に嫌う傾向がある。また、C++にはtemplateという機能存在し多く場合仮想関数template代用できてしまうた仮想関数にこだわる必要がないという事情もある[疑問点ノート]。ただし、デストラクタが非仮想場合派生クラスインスタンスポリモーフィックdelete不可能となる、という利便性および安全上のデメリット発生するメソッドデフォルトで非仮想というC++準ずる設計選択をしたC#においても、仮想メソッド呼び出しには非仮想メソッドよりもコストがかかることを念頭に置いて利用する必要があるJavaのインスタンスメソッドは常に仮想であるが、クラスメソッド(静的メソッド)はオーバーライドすることのできない仮想であるため、静的メソッドのほうが呼び出しコスト小さくパフォーマンス上のメリットがある。 Javafinal修飾子は、パフォーマンス上の理由というよりはむしろ、派生クラスでの不用意なオーバーライド禁止してバグ未然防止することにある。「Javaではメソッドfinal修飾することでコンパイラ最適化によりパフォーマンス向上する」という神話があるが、一方でJava仮想マシン性能によってはメソッドfinal宣言したからといって優れたパフォーマンス得られるとは限らないという指摘もある。なお、OracleHotSpot VMは、finalメソッド検出して非常に効率よく実行できるように最適化されていると説明されている。

※この「仮想と非仮想」の解説は、「メソッド (計算機科学)」の解説の一部です。
「仮想と非仮想」を含む「メソッド (計算機科学)」の記事については、「メソッド (計算機科学)」の概要を参照ください。

ウィキペディア小見出し辞書の「仮想と非仮想」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「仮想と非仮想」の関連用語

仮想と非仮想のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



仮想と非仮想のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのメソッド (計算機科学) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS