C++,构造函数的原因

Can*_*ncü 3 c++ constructor

我有两个问题.

1)构造函数真正做了什么?如果我们在声明实例时不使用构造函数会发生什么?

你能告诉我这两者之间的区别吗?

A a(1,2)

A *a = new A(1,2)
Run Code Online (Sandbox Code Playgroud)

最好的祝福.

Jak*_*les 8

构造函数初始化类的成员变量,以便可以使用它.声明实例时不使用构造函数的结果因上下文而异.

如果要在堆上分配变量,如下所示:

A *a;
Run Code Online (Sandbox Code Playgroud)

a 将指向内存中的随机地址,直到将其分配给NULL或0,或者类的现有或新实例,例如:

A *a = new A(1, 2);
Run Code Online (Sandbox Code Playgroud)

如果要在堆栈上分配变量,则使用以下语法:

A a(1, 2); // if parameters are used
A a; // if no parameters are used
Run Code Online (Sandbox Code Playgroud)

以上两者都调用类的构造函数,A在堆栈上分配它的实例.因此,这回答了你的两个问题 - 你的第一个例子A在堆栈上分配一个实例,第二个例子A在堆上分配一个实例.