隐藏指针与引用

Lau*_*ent 3 c++ pointers reference

隐藏使用引用的setter的指针成员是一件好事吗?

class Foo
{
    Bar* m_ptr;
public :
    void setBar(Bar& bar){m_ptr = &bar;}
};
Run Code Online (Sandbox Code Playgroud)

或者最好在setter中公开引用对象的真实类型(以及为什么)?

void setBar(Bar* bar){m_ptr = bar;}
Run Code Online (Sandbox Code Playgroud)

事实上,我正在使用不是"引用友好"的stl竞争者,因此我将指针的向量作为类成员但我更喜欢处理引用的方法.这样做是件坏事吗?

编辑:

存储的成员是指针,这个例子更适合我的问题:

class Foo
{
   std::vector<FooObserver *> m_observers; 
public :
Run Code Online (Sandbox Code Playgroud)

你更喜欢这个:

void addObserver(FooObserver* obs);
Run Code Online (Sandbox Code Playgroud)

或这个 :

void addObserver(FooObserver& obs);
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,指针永远不应该为NULL,我认为这是调用者对象的责任.

Jar*_*Par 5

对我来说,它归结为该类型的语义.如果指针正在屏蔽一个从不打算成为的成员,NULL那么绝对在输入和输出位置使用引用.如果值可以合法,NULL那么使用指针是最好的方法