C ++高度な3:セキュリティとSTLの種類

  • 動的配列を処理しないでください。

ここでは、2つの意味があります。

  1. それは実際にかなりオフセット計算によるサブクラスの予想サイズよりも、オフセット基本クラスのサイズを計算されるように地上支持ポインタは、動的++、+ nはこの操作ではありません。

2.ポインタ参照、及びインターフェースを利用することではない、その理由はなく、オブジェクトの配列よりも、当該物体の表面をクリアすることが望ましいです。

  • 無効なオブジェクトを使用しないでください

オブジェクトが含まれ、障害を見落とすことがしばしば簡単:

  1. 失敗意味オブジェクト:(ダングリング後)ダングリング削除されたオブジェクトへのポインタ
  2. 障害イテレータ:例えば、イテレータのコンテナ最初の挿入ベクトル<T> ::イテレータ私に指摘し、後
  • 安全でないレガシーC言語関数を使用しないでください:
    strcpyのは\ sprintfのバッファは、範囲をチェックされません。strncpyを\チェックのバッファ境界はsnprintfのが、ヌルバッファ制限に達すると追加しないでください。だから、安全ではありません

  • 可変長のパラメータを使用しないでください(...)
    C ++可変長パラメータの欠点は、次のとおりです。

    1. 型の安全性の欠如。省略記号は、基本的にコンパイラに指示します:閉じるすべてのチェック、私に引き継がれているので、reinterpret_castはを開始します
    2. 呼び出し元と呼び出し先密結合があります。
    3. オブジェクト・クラスの挙動タイプが定義されていません。
    4. 未知のパラメータの数
  • 共同再解釈表現を使用しないでください
    、このような労働組合のメンバーとポインタ型のlong型のメンバーとして、割り当てへのポインタは、その後、長いことで自分のアドレスを読んで、その問題が存在します。

    1. 異なるアーキテクチャおよびコンパイラのsizeof(長い)はsizeof(文字*)に等しくなくてもよいです
    2. コードの可読性を削減。
  • 、のmemcpyを使用してオブジェクトをコピーしないでくださいmemcmpを持つオブジェクトを比較しない
    ほとんどのコンパイラが実装したときに仮想継承を使用して、マルチステートオブジェクトに隠されたデータの一部(いわゆる仮想関数テーブルポインタvptr)を埋め込みますが、より多くの内部ポインタが追加されますコンパイラ。一般的な使用は、コンパイラは、これらすべての隠されたデータを管理する責任があります。

おすすめ

転載: blog.51cto.com/xiamachao/2460837