C ++ 11 позволяет конструктор цепочки (частично).Эта функция называется " делегирование конструкторов ".Таким образом, в C ++ 11 вы можете сделать следующее
class Foo
{
public:
Foo(int a) : Foo() { _a = a; }
Foo(char* b) : Foo() { _b = b; }
Foo() { _c = 1.5; }
private:
int _a = 0;
char* _b = nullptr;
double _c;
};
Однако существует серьезное ограничение, заключающееся в том, что конструктору, который вызывает другой конструктор, не разрешается инициализировать любые другие члены.Таким образом, вы не можете сделать следующее с делегирующим конструктором:
class Foo
{
public:
Foo(int a) : Foo(), _a(a) { }
Foo(char* b) : Foo(), _b(b) { }
Foo() { _c = 1.5; }
private:
int _a = 0;
char* _b = nullptr;
double _c;
};
MSVC ++ 2013 выдает ошибку компиляции «C3511: вызов делегирующего конструктора должен быть единственным инициализатором-членом» для последнего примера кода.