C++ C++;指针和构造函数

C++ C++;指针和构造函数,c++,C++,可能重复: 如果我有这段代码 A a1(i); A a2 = a1; A *pa1 = new A(a2); 有人能解释一下最后一行到底是做什么的吗?它复制了a2,这个新对象的指针是pa1,或者它只是为a2创建了指针,这要提前感谢最后一行创建了一个新对象a,pa1指向该对象,其内容与a2的内容相同 我相信这个示例演示了如何使用带参数的构造函数(第一行)、复制构造函数(第二行)和另一个复制构造函数(最后一行)。最后,所有三个对象都将具有相同的内容。在第1行,您正在创建一个A对象,调用A构造函数

可能重复:

如果我有这段代码

A a1(i);
A a2 = a1;
A *pa1 = new A(a2);

有人能解释一下最后一行到底是做什么的吗?它复制了a2,这个新对象的指针是pa1,或者它只是为a2创建了指针,这要提前感谢

最后一行创建了一个新对象a,pa1指向该对象,其内容与a2的内容相同


我相信这个示例演示了如何使用带参数的构造函数(第一行)、复制构造函数(第二行)和另一个复制构造函数(最后一行)。最后,所有三个对象都将具有相同的内容。

在第1行,您正在创建一个
A
对象,调用
A
构造函数,传入
1
,并将其分配给
a1

在第2行,您正在复制
a1


在第3行,您正在创建一个新的
a
对象,调用
a
复制构造函数,传入复制的对象
a1
,并在内存中返回指向该对象的指针。

第一行在堆栈上创建一个类(a1)的新实例(所以它的生存期限于当前范围)。使用的构造函数将取决于i的类型

第二行将在堆栈(a2)上创建类的另一个实例。将使用复制构造函数,因此如果复制操作是合理实现的(或者默认操作对您的类有意义),那么它将是源实例(a1)的副本。如果无法访问兼容的复制构造函数,则会发生编译器错误


第三行返回一个指针,指向在堆上分配的类a(pa1)的新实例。必须显式管理它的生存期,并且实际对象可以超过指针本身的作用域。与第二种情况一样,它是使用复制构造函数复制的。

第3行:你是指复制构造函数。请注意在上述段落中如何使用术语“new”。第二行可能是一个复制收缩器(试试看),你是对的。我编辑了我的答案。请:不要重复问题。此外,当你知道这是一个重复的事实时(你问了对方)。