有効に割り当てられる前にポインターが使用されると、コードが頻繁にクラッシュすることがわかりました。次に例を示します。
MyType* p = 0;
p->foo(); // crashes because p is not assigned.
if を保護するために、通常は次のようなポインターを使用する前に assert ステートメントを追加します。
assert(p);
しかし、アサーションを追加することを忘れがちです。セーフガードを行うためのより良い方法はありますか?または、クラッシュが発生したときにユーザーのコードでクラッシュを特定するのに役立つツールはありますか?
実際、私はデータを所有するためにスマート ポインターをよく使用します。生のポインターは、参照用にのみ使用されます。例えば:
std::unique_ptr<Model> p;
class View
{
public:
View(Model* model = 0) : m_model(model) {}
void setModel(Model* model) {m_model = model;}
Model* model() const {return m_model;}
private:
Model* m_model;
};
ビューのモデルを設定するのを忘れると、問題は解決しません。大きなコードでは、忘れがちです。