有没有一种方法可以禁止在继承的类中声明对象成员?

时间:2020-07-10 14:52:49

标签: c++ inheritance constructor member

我需要构造一个使用基类构造函数的专用对象。 这将在模板方法中发生,因此构造的对象将是我创建的专门类之一。

比方说,我们有以下类:Base,Child1,Child2,Child3。

template <class T>
std::shared_ptr<T> createObject(...) {

...

return std::make_shared<T>(arg X, arg Y);
}

我希望此方法返回类Child1Child2Child3的对象。因此,我正在使用Base类构造函数Base(arg X, arg Y)

问题是,如果我在这些类之一中有一个对象成员,则在使用基类构造该对象时可能不会初始化。

示例:

struct A{
    A() = default;
    int a{1};
    int b{2};
};

struct B:public A{
    B(int val):c{val}{};
    using A::A;
    int c{3};
};

int main(){
    auto b_obj = std::make_shared<B>();
    return b_obj->c;
}

使用MSVC,b_obj结构并未初始化int c对象成员。

因此,为了避免这种容易出错的行为,例如,我想知道是否存在一种方法来禁止在继承的类中声明对象成员。

或者,如果我有其他解决方法,请避免出错。

0 个答案:

没有答案