Я хочу знать, каков процесс создания объекта определенного пользователем типа.
пример
class A{
int a;
void f();
int b;
A() /*initialization list*/ {}
};
int main(){
A ob;
}
1) Я хочу знать, в какое время объект выделяется, и в какое время конструктор A
будет вызван.
2) Когда его член распределяется? В то же время сам объект выделяется?
3) Когда я могу сказать, что объект полностью создан и безопасен для использования? Это только после начала конструктора или до конца конструктора?
4) Я знаю, что члены инициализируются в списке инициализации конструктора, так что это до вызова конструктора. Означает ли это, что члены существуют до существования объекта?
5) Когда объект освобождается? Это до того, как деструктор закончится?
Некоторые дополнительные Информация
Объект создается при вводе области действия, в которой он определен.
Сначала он выделяет объект, а затем вызывает его конструктор. Ваш объект безопасен для использования в конце выполнения конструктора. Выделение объекта зарезервировать sizeof(A)
Таким образом, каждый участник выделяется одновременно (поэтому они называются участниками).
Список инициализации вызывается до выполнения конструктора, но в настоящее время он уже выделен, поэтому его можно инициализировать безопасно, поскольку ваш объект существует.
Объект освобождается в конце выполнения деструктора, а не раньше.
1) На вашем A ob;
строка, но она будет размещена в стеке, а не в куче!
2) Так будет называться конструктор, так что да.
3) Если вы используете конструктор по умолчанию, да, вы можете сделать
4) Похоже на тот же вопрос, что и 3, так что да
5) Нет, вы можете получить доступ к членам в деструкторе
class A
выделяется, что включает в себя память, занятую его членами. После этого конструктор A::A()
называется.A::~A()
сначала вызывается, затем память, занятая объектом, освобождается.1. Объект будет выделен при вызове конструктора объекта, а конструктор объекта будет вызван при создании объекта класса.
2.
3.В конце конструктора, потому что все члены должны быть инициализированы
4.
5.После того, как деструктор называется.
Во-первых, вы должны объявить конструктор в публичном разделе вашего класса.
A ob
)Примечание: стандарт с ++ не определяет порядок инициализации статических членов. Это зависит от компилятора.