我想知道创建用户定义类型的对象的过程是什么。
实施例
class A{
int a;
void f();
int b;
A() /*initialization list*/ {}
};
int main(){
A ob;
}
1)我想知道对象何时被分配,以及A
的构造函数何时被调用。
2)其成员何时获得分配?是否同时对象本身被分配?
3)我什么时候可以说对象是完全创建的并且可以安全使用?它只是在构造函数的开头之后,还是直到构造函数的结尾?
4)我知道成员在构造函数初始化列表中初始化,所以它在构造函数的调用之前。这是否意味着成员在对象存在之前存在?
5)什么时候对象被解除分配?它是在析构函数结束之前吗?
答案 0 :(得分:2)
一些额外的info
答案 1 :(得分:0)
当您输入定义它的范围时,将创建该对象。
首先分配对象,然后调用其构造函数。您可以在构造函数执行结束时使用对象。分配对象会保留sizeof(A)
,因此每个成员都会同时分配(这就是为什么这些成员被称为成员)。
在执行构造函数之前调用初始化列表,但此时它已经被分配,因此可以安全地初始化它们,因为您的对象存在。
对象在析构函数执行结束时被处理掉,而不是之前。
答案 2 :(得分:0)
1)在你的A ob;
行,但它将被分配到堆栈上,而不是堆上!
2)所以构造函数将被调用,所以是的。
3)如果使用默认构造函数,则可以执行
4)看起来像3一样的问题,所以是的
5)不,你可以访问析构函数中的成员
答案 3 :(得分:0)
class A
实例的内存,包括其成员占用的内存。然后,调用构造函数A::A()
。A::~A()
,然后释放对象占用的内存。答案 4 :(得分:0)
1。在调用对象构造函数时将分配对象,并在创建类的对象时调用对象构造函数。
2。
3。在构造函数的末尾,因为必须初始化所有成员 4。 5. 调用析构函数后。
答案 5 :(得分:0)
首先,您应该将构造函数声明为您的类的公共部分。
A ob
)注意:标准的с++没有指定静态成员的初始化顺序。这取决于编译器。