像这样的班
class A{
public:
const B& instanceOfB ;
A(const B& someInstanceOfB):
instanceOfB(someInstanceOfB)
{
};
// some methods depending on instanceOfB here
};
应该扩展为提供一些不依赖于instanceOfB
的方法,并且这些方法必须在没有任何instanceOfB
的情况下可以访问(即,根本不存在B
的实例) )。
因此,直截了当的扩展名可能看起来像
class A{
public:
B* const instanceOfB ;
A():
instanceOfB(nullptr)
{
}
// some methods not depending on instanceOfB here
void assignInstanceOfB(B* const someInstanceOfB){
instanceOfB = someInstanceOfB;};
// some methods depending on instanceOfB here
};
但是,我认为这有几个缺点:
assignInstanceOfB
的任何其他方法之前先调用instanceOfB
instanceOfB
的任何方法都必须检查初始化是否已执行。这会产生巨大的(即难看的)开销。nullptr
初始化,在我看来,这似乎是不好的做法。我通常会尝试避免使用任何指针。所以我对这种设计并不十分满意。看起来更复杂的版本是什么样的?谢谢!
编辑:由于评论,我添加了以下附加要求: -不能分组 -必须存储对B的引用,不能仅将其交给相应的方法。
总而言之,似乎推荐或至少通常使用指针(包括智能指针)。