конструктор — C ++ пользовательский тип времени жизни

Я хочу знать, каков процесс создания объекта определенного пользователем типа.

пример

class A{
int a;
void f();
int b;
A() /*initialization list*/ {}
};

int main(){
A ob;
}

1) Я хочу знать, в какое время объект выделяется, и в какое время конструктор A будет вызван.
2) Когда его член распределяется? В то же время сам объект выделяется?
3) Когда я могу сказать, что объект полностью создан и безопасен для использования? Это только после начала конструктора или до конца конструктора?
4) Я знаю, что члены инициализируются в списке инициализации конструктора, так что это до вызова конструктора. Означает ли это, что члены существуют до существования объекта?

5) Когда объект освобождается? Это до того, как деструктор закончится?

-1

Решение

  1. На линии «Обь»; Сначала выделяется память для объекта, затем вызывается конструктор.
  2. Это когда прямо перед вызовом конструктора объекта.
  3. Если конструктор не завершил свою работу — объект еще не создан. Если вы получили исключение в конструкторе, деструктор не будет вызван.
  4. Да. Ваш объект не существует, но выделен.
  5. Объект освобождается после вызова деструктора (или без его вызова, если в конструкторе было исключение).

Некоторые дополнительные Информация

2

Другие решения

Объект создается при вводе области действия, в которой он определен.

Сначала он выделяет объект, а затем вызывает его конструктор. Ваш объект безопасен для использования в конце выполнения конструктора. Выделение объекта зарезервировать sizeof(A)Таким образом, каждый участник выделяется одновременно (поэтому они называются участниками).

Список инициализации вызывается до выполнения конструктора, но в настоящее время он уже выделен, поэтому его можно инициализировать безопасно, поскольку ваш объект существует.

Объект освобождается в конце выполнения деструктора, а не раньше.

0

1) На вашем A ob; строка, но она будет размещена в стеке, а не в куче!

2) Так будет называться конструктор, так что да.

3) Если вы используете конструктор по умолчанию, да, вы можете сделать

4) Похоже на тот же вопрос, что и 3, так что да

5) Нет, вы можете получить доступ к членам в деструкторе

0

  1. Во-первых, память для экземпляра class A выделяется, что включает в себя память, занятую его членами. После этого конструктор A::A() называется.
  2. Да, смотри выше.
  3. Ответ зависит от вашего определения «полностью создан». В теле конструктора безопасно делать что угодно, с некоторыми оговорками. Наиболее известным является вызов виртуальных методов.
  4. Список инициализации конструктора является частью конструктора, он просто выполняется до того, как поток управления достигает открывающей фигурной скобки конструктора.
  5. На разрушении, деструктор A::~A() сначала вызывается, затем память, занятая объектом, освобождается.
0

1. Объект будет выделен при вызове конструктора объекта, а конструктор объекта будет вызван при создании объекта класса.
2.
3.В конце конструктора, потому что все члены должны быть инициализированы
4.
5.После того, как деструктор называется.

0

Во-первых, вы должны объявить конструктор в публичном разделе вашего класса.

  1. Выделение памяти происходит при создании объекта (для вас это
    распределяется по стеку)
  2. Члены распределяются, когда объект создается
  3. После создания объекта (в вашем случае A ob)
  4. Нет, члены инициализируются в момент создания конструктора
  5. Сначала вызов деструктора, затем освобождение

Примечание: стандарт с ++ не определяет порядок инициализации статических членов. Это зависит от компилятора.

0
По вопросам рекламы [email protected]