Сравните со следующим:
class C
{
public:
C() { std::cout << 'c' }
~C() { std::cout << 'd' }
};
void test()
{
C f;
std::cout << 't';
}
Вы должны знать об этом, вы создаете временный объект, выходящий за пределы области действия в конце функции.Вы должны увидеть выходные данные ctd
void test()
{
C();
std::cout << 't';
}
То же самое снова, с небольшой разницей: объект выходит за пределы области действия сразу после выполнения оператора, поэтому выходные данные будут cdt
.
Теперь то же самое происходит в вашем конструкторе, вы просто создаете временный отдельный объект FF при вызове FF()
внутри тела конструктора.
Я полагаю, вы вместо этого намеревались делегировать конструктор (доступно с C ++ 11);однако синтаксис другой:
FF(int const*, int)
: FF() // as if using the initialiser list
{ /* can do some extra work here */ }
Теперь конструктор по умолчанию будет вызываться на this
перед вводом тела функции.Разумеется, работает с любым конструктором, при условии, что он вызывается соответствующим образом:
FF() : FF(nullptr, 0) { }
Теперь конструктор по умолчанию будет вызывать ваш второй.