我发现在有效分配之前使用指针时,代码经常会崩溃,例如:
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;
};
当我忘记为视图设置模型时,问题仍然存在。在大型代码中,很容易忘记这样做。