У меня есть класс с частным конструктором и фабричным методом.
Возможно ли, чтобы экземпляр этого класса был переменной-членом другого класса? Если я попытаюсь сделать это нормально, он не будет компилироваться, потому что он не может вызвать конструктор. Возможно ли получить переменную-член, инициализированную фабричным методом?
А если нет, то какие у меня варианты? Нужно ли использовать какой-то указатель?
class ClassWithPrivateConstructor
{
private:
ClassWithPrivateConstructor(){}
public:
static ClassWithPrivateConstructor Create(); // factory method
};
class ClassWithMemberVariable
{
ClassWithPrivateConstructor a;
};
Конечно. Поскольку элемент не может быть инициализирован по умолчанию, вам понадобится инициализатор:
ClassWithPrivateConstructor a = ClassWithPrivateConstructor::Create();
или, если вы застряли с вариантом языка до 2011 года, инициализатор в каждом конструкторе:
public:
ClassWithMemberVariable() : a(ClassWithPrivateConstructor::Create()) {}
Просто убедитесь, что каждый конструктор инициализирует элемент с помощью фабричного метода:
class ClassWithMemberVariable
{
ClassWithPrivateConstructor a;
ClassWithMemberVariable(): a(ClassWithPrivateConstructor::Create()) {
;
}
};