Могу ли я иметь переменную-член, которая создается только методом фабрики?

0

У меня есть класс с частным конструктором и фабричным методом.

Возможно ли, чтобы экземпляр этого класса был переменной-членом другого класса? Если я попытаюсь сделать это нормально, он не будет компилироваться, потому что он не может вызвать конструктор. Возможно ли получить переменную-член, инициализированную фабричным методом?

А если нет, то какие у меня варианты? Нужно ли использовать какой-то указатель?

class ClassWithPrivateConstructor
{
private:
   ClassWithPrivateConstructor(){}
public:
  static ClassWithPrivateConstructor Create(); // factory method
};

class ClassWithMemberVariable
{
  ClassWithPrivateConstructor a;
};
Теги:

2 ответа

3
Лучший ответ

Конечно. Поскольку элемент не может быть инициализирован по умолчанию, вам понадобится инициализатор:

ClassWithPrivateConstructor a = ClassWithPrivateConstructor::Create();

или, если вы застряли с вариантом языка до 2011 года, инициализатор в каждом конструкторе:

public:
    ClassWithMemberVariable() : a(ClassWithPrivateConstructor::Create()) {}
2

Просто убедитесь, что каждый конструктор инициализирует элемент с помощью фабричного метода:

class ClassWithMemberVariable
{
  ClassWithPrivateConstructor a;
  ClassWithMemberVariable(): a(ClassWithPrivateConstructor::Create()) {
    ;
  }
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню