Херб Саттер упоминает в одной из своих http://www.gotw.ca статей о том, что объект создан (имеет допустимое существование) только в том случае, если конструктор выполнит завершение. То есть, грубо говоря, управление переходит за окончательную скобку. 1003 *
Теперь рассмотрим следующий код
class A
{
public:
A()
{
f();
}
void f()
{
cout << "hello, world";
}
};
int main()
{
A a;
}
Теперь из того, что говорит Херб, мы не можем сказать, что, поскольку A не полностью сконструирован внутри своего конструктора. Вызов f () внутри конструктора недопустим, поскольку ptr "this" еще не готов.
Тем не менее, внутри конструктора действительно есть допустимое "this", и f () действительно вызывается.
Я не думаю, что Херб говорит что-то неправильное ... но думаю, что я неверно истолковываю это ... некоторые могут объяснить мне, что именно это такое?
Вот ссылка на статью: http://www.gotw.ca/gotw/066.htm
Это говорит об исключениях из конструкторов. В частности, вот выдержка из него, на которой основан мой вопрос:
-Когда начинается жизнь объекта?
Когда его конструктор завершается успешно и возвращает нормально . Таким образом, элемент управления достигает конца тела конструктора или более раннего оператора возврата.
-Когда заканчивается срок службы объекта?
Когда начинается его деструктор. То есть контроль достигает начала тела деструктора.
Важным моментом здесь является то, что состояние объекта до того, как начинается его время жизни, точно такое же, как и после того, как заканчивается его время жизни - объекта нет, период . Это наблюдение подводит нас к ключевому вопросу:
Мы можем обобщить модель конструктора C ++ следующим образом:
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.