0

我发现在有效分配之前使用指针时,代码经常会崩溃,例如:

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;
};

当我忘记为视图设置模型时,问题仍然存在。在大型代码中,很容易忘记这样做。

4

1 回答 1

0

对于这类事情,我最喜欢的工具是 valgrind。在开发过程中,你运行你的程序valgrind myProg...,它会告诉你无效的内存访问、泄漏和其他事情。

但是,至于在取消引用之前添加一个指针不为空的断言,如果您说程序无论如何都会在空取消引用时崩溃,这似乎有点不必要。添加断言可能会使崩溃的原因更容易跟踪,但也许您有更深层次的问题(即一般过度使用或滥用原始指针)。

于 2013-02-23T04:28:51.153 回答