我需要构造一个使用基类构造函数的专用对象。 这将在模板方法中发生,因此构造的对象将是我创建的专门类之一。
比方说,我们有以下类:Base,Child1,Child2,Child3。
template <class T>
std::shared_ptr<T> createObject(...) {
...
return std::make_shared<T>(arg X, arg Y);
}
我希望此方法返回类Child1
,Child2
或Child3
的对象。因此,我正在使用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
对象成员。
因此,为了避免这种容易出错的行为,例如,我想知道是否存在一种方法来禁止在继承的类中声明对象成员。
或者,如果我有其他解决方法,请避免出错。