Здравствуйте, 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, у которого конструктор генерируется самим компилятором... Ну звучит как такое себе.