我发现在有效分配指针之前,代码经常会崩溃,例如:
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;
};
当我忘记为视图设置模型时,问题仍然存在。在大型代码中,很容易忘记这样做。
答案 0 :(得分:0)
我最喜欢这种东西的工具是valgrind。在开发过程中,您运行的程序如valgrind myProg...
,它会告诉您有关无效的内存访问,泄漏和其他事情。
但至于在解除引用之前添加一个指针不为null的断言,如果你说程序在null解除引用时崩溃,这似乎有点不必要。添加断言可能会使崩溃的原因更容易跟踪,但也许您有更深层次的问题(即一般过度使用或滥用原始指针)。