如何在指针关联时编写无错误的代码?

use*_*020 0 c++ pointers

例如

struct A
{
    void foo() {};
};

struct B
{
    B() {}

    void setA(A* a) { mA = a; }
    foo()           { mA->foo(); }

    A *mA;
};
Run Code Online (Sandbox Code Playgroud)

内部有一个A关联的(只是一个地址)B.而且B::mA一定不能null.我经常忘记setA并且引入了错误.有什么好的做法可以避免它?setA以下怎么样?

void B::setA(A& a) { mA = &a; }
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 6

最好的方法是首先避免使用指针.如果必须使用指针,请考虑使用智能指针,如std::unique_ptrstd::shared_ptr.始终,始终初始化指针,要么为null(除非你使用智能指针)或你已经分配的东西.而一向总是 一直在使用前检查空.