「プログラミングの禁じ手Web版 C++ 編」サルベージ|初心者へのおすすめサイト

この記事は約4分で読めます。

cmagazine数年ぶりに業務で C++ を使う必要が出てきたので、今は削除されてしまった C++ の素晴らしいサイトをサルベージしてみました。月刊 C Magazine に連載されていたものをWebで公開していた「プログラミングの禁じ手Web版 C++編」というサイトです。タコなコードの紹介、それを書いてしまう原因、及びその対策、さらにそれについての補足説明が書いてある素敵なサイトです。

スポンサーリンク

ウェブアーカイブとは

あなたはウェブアーカイブというものをご存知ですか?これはその名の通り、インターネット上の情報を取集して保存することです。国会国立図書館を始めいろんな団体がウェブアーカイブを行っています。これを利用することで、現在は削除されてしまったサイトを見ることができます。

今回探していた「プログラミングの禁じ手Web版 C++編」というサイトは、月刊 C Magazine の廃刊とともにサイトが削除されてしまいました。そこで、ウェブアーカイブを実施いているサイトから探してみました。今回は Wayback Machineというサイトを使いました。

スポンサーリンク

プログラミングの禁じ手Web版 C++編 のありか@Wayback Machine

Wayback Machine で探したところ、ちゃんとありましたプログラミングの禁じ手Web版 C++編です。9年前くらいの情報のようですが、ちゃんと保存されているんですね。すごいです。

スポンサーリンク

プログラミングの禁じ手Web版 C++編 の目次

ここでは、どんな内容が書いてあるのか知るために目次を紹介いたします。
詳細はプログラミングの禁じ手Web版 C++編を参照ください。

規模や複雑さに関するパターン

  • 継承レベルが深い
  • 多重継承が多い、悪用している
  • クラスのメンバ変数あるいはメンバ関数が多い
  • サイズの大きいメンバ変数のあるクラスで自動変数を作る
  • 複数のメンバ関数をややこしく利用する仕様にする
  • オブジェクトの生成、消滅、コピー等で複雑な依存関係にする
  • 隠蔽とスコープに関するパターン

  • メンバ変数をpublicにする
  • publicにする必要のないメンバ関数をpublicにする
  • 内部の実装を表にさらす(メンバ変数へのポインタをえるメンバ関数を作る)
  • 複数のインスタンスに所有されたくないワークをstaticメンバ変数やメンバ関数内で静的変数にする
  • 使われたくない基底クラスのpublicメンバを隠していない
  • friendを悪用する
  • 使われたくない暗黙のメンバ関数を未定義にしない
  • 仕様の誤解に関するパターン

  • デストラクタをvirtualにしない
  • コンストラクタやデストラクタが起動する順番があいまい
  • newとmallocを混同する(freeとdeleteを混同する)
  • newとnew[]を取り違える(deleteとdelete[]を取り違える)
  • コピーコンストラクタと代入演算子を混同する
  • 二重にdeleteする
  • 不定値でdeleteする
  • 継承したクラスのコンストラクタが基底クラスのどのコンストラクタを呼ぶかを確認しない
  • 違うクラスのメンバをキャストで無理やり使う
  • ヌル値や不定値のリファレンスを作ってしまう
  • 演算子オーバーロードを悪用する
  • すでに広く利用されている基底クラスの仕様を変える
  • 誰が確保、解放するのか不明確なポインタメンバ変数を持つ
  • newが失敗しうることを考慮しない
  • メンバ変数が不定値で評価される
  • 例外に関するパターン

  • コンストラクタ内で例外を起こす
  • デストラクタ内で例外を起こす
  • ポインタをthrowする、「throw new 例外クラス」とする
  • 例外クラスの中で例外が起こりうる
  • 理念の誤解に関するパターン

  • クラスを構造体と勘違いする
  • 構造化とクラス化を勘違いする
  • C++はC言語の完全な上位互換性があると思い込む
  • 利用するC++コンパイラが「プログラミング言語C++」の第何版に準拠するか知らない
  • 継承と所有を混同する
  • 以上、「プログラミングの禁じ手Web版 C++編」のご紹介でした。

    ちなみに現在(2016-09-14)、月刊 C Magazine はすでに廃刊になっていますが、過去のバックナンバーは達人出版会 から購入可能です。1冊あたり100円ほどのようです。

    コメント