C ++:避免​​对构造函数中的成员进行nullptr初始化

时间:2018-09-14 17:38:26

标签: c++

像这样的班

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的引用,不能仅将其交给相应的方法。

总而言之,似乎推荐或至少通常使用指针(包括智能指针)。

0 个答案:

没有答案