Re[23]: Ошибка, если конструктор определен в h-файле (этюд?)
От: so5team https://stiffstream.com
Дата: 06.07.23 09:34
Оценка: +1
Здравствуйте, rg45, Вы писали:

S>>Но мне кажется, что Class1 по любому должен создаваться через какую-то фабрику, а не просто как значение на стеке (или в агрегате).


R>Да и на стеке тоже должно воспроиводиться, почему нет.

R>Это успешная версия. После переноса конструктора, появляется ошибка.

Потому что Shmj говорил, что изначально у Class1 вообще явно определенного конструктора не было, был только дефолтный, сгенерированный самим компилятором. Если я правильно понимаю, то вот в таком случае:
class Class2;

class Class1 {
  std::unique_ptr<Class2> ptr_member_;
public:
  // Нет ни конструктора, ни деструктора.
};

int main() {
  Class1 c;
}

компиляция должна завершиться с ошибкой, т.к. здесь нет определения Class2.

Но вот в таком случае все OK:
class Class2;

class Class1 {
  std::unique_ptr<Class2> ptr_member_;
public:
  // Нет ни конструктора, ни деструктора.

  static std::unique_ptr<Class1> make();
};

int main() {
  auto c = Class1::make();
}


Да и вообще класс с PImpl, у которого конструктор генерируется самим компилятором... Ну звучит как такое себе.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.