У меня есть класс Foo
, который имеет ссылку на Bar
в качестве переменной экземпляра. Есть ли способ, чтобы один из конструкторов Foo
создал экземпляр Bar
(поэтому пользователям класса Foo
не нужно явно создавать объект Bar
)?Укажите значение по умолчанию для инициализации инициализации ссылочной переменной экземпляра
Я хотел бы сделать что-то вроде этого:
class Foo {
private:
int size;
Bar& bar; // shared by other objects
//several other instance variables
public:
Foo(int s, Bar& b) : size(s), bar(b) {}
// This, of course, doesn't work. I can't think of an
// alternative that doesn't require users of Foo to
// create Bar
Foo(int s) : size(s), bar(Bar(s)) {}
}
(В «реальной жизни», Foo
и Bar
являются более сложными Bar
является другим Foo
, который имеет приватный конструктор используется только Foo
. . Каждый Bar
может совместно использоваться несколькими Foo
с. Это не является серьезной проблемой, я просто интересно, если это может быть сделано без указателей.)
Одно грязное решение состоит в том, что вы можете иметь статический член типа bar в классе foo и предоставить его во втором конструкторе :) – zapredelom