私はトーラックに同意します。
不適切な初期化やオーバーフローは、コードの品質が低いことを示しています。
Google がそのようにしたのは、ページで実行されたコードを制御する方法がない場合があったためです (プラグインの不具合などにより)。したがって、低品質のプラグインを使用している場合 (それは起こります)、Google のソリューションが適している可能性があります。
しかし、頻繁にクラッシュするプラグインのないプログラムは、単に書き方が悪いか、非常に複雑であるか、非常に古い (そして多くのメンテナンス時間を欠いている) だけです。開発を停止し、すべてのクラッシュを調査する必要があります。Windows では、モジュールを PDB (プログラム データベース) でコンパイルし、クラッシュするたびにデバッガーをアタッチします。
内部テストも追加する必要があります。次のパターンは避けてください。
doSomethingBad(T * t)
{
if(t == NULL) return ;
// do the processing.
}
エラーが存在するため、これは非常に悪い設計であり、今回は回避するだけです。しかし、このガードのない次の関数はクラッシュします。エラーに近づくには、早くクラッシュする方がよいでしょう。
代わりに、Windows で (MacOS にも同様の API が必要です)
doSomethingBad(T * t)
{
if(t == NULL) ::DebugBreak() ; // it will call the debugger
// do the processing.
}
(このコードを直接使用しないでください... クライアントに渡さないように定義に入れます...) 自分に合ったエラー API (例外、DebugBreak、assert など) を選択できますが、それを使用してください。コードが何かが間違っていることを認識した瞬間に停止します。
可能な限り C API を避けてください。C++ のイディオム (RAII など) とライブラリを使用します。
等..
PS: 例外を使用する場合 (これは良い選択です)、キャッチ内にそれらを隠さないでください。エラーが存在するため、問題が悪化するだけですが、プログラムは続行しようとし、後でクラッシュすることがあり、その間に触れたものはすべて破損します。