Херб Саттер упоминает в одной из своих статей http://www.gotw.ca, что объект построен (имеет действительное существование), только если конструктор выполняет завершение. т.е. грубо контролировать контроль за его конечной фигурной скобкой.
Теперь рассмотрим следующий код
class A
{
public:
A()
{
f();
}
void f()
{
cout << "hello, world";
}
};
int main()
{
A a;
}
Теперь из того, что говорит Херб, нельзя сказать, что поскольку A не полностью сконструирован внутри своего конструктора Вызов f() внутри конструктора недопустим, поскольку ptr еще не готов.
Тем не менее в конструкторе действительно существует "this", и f() действительно вызвано.
Я не думаю, что Херб говорит что-то неправильное... но думаю, что я неправильно его интерпретирую... может кто-нибудь объяснить мне, что это такое?
Вот ссылка на статью: http://www.gotw.ca/gotw/066.htm В нем говорится об исключениях от конструкторов. В частности, вот выдержка из него, на которой основан мой вопрос:
-Когда начинается срок жизни объекта? Когда его конструктор успешно завершен и обычно возвращается. То есть, управление достигает конца тела конструктора или более раннего оператора return.
-Когда конец жизни объекта заканчивается? Когда начнется его деструктор. То есть, управление достигает начала тела деструктора. Важным моментом здесь является то, что состояние объекта до его начала жизни точно такое же, как и после его окончания жизни - нет объекта, периода. Это наблюдение приводит нас к ключевому вопросу:
Мы можем суммировать модель конструктора С++ следующим образом:
Either:
(a) The constructor returns normally by reaching its end or a return statement, and the object exists.
Or:
(b) The constructor exits by emitting an exception, and the object not only does not now exist, but never existed.