2010-06-15 109 views
0

可能重复:
question about copy constructorC++指针和构造

如果我有代码的这个片断

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

可以请人确切地解释的最后一行做什么,它使a2的副本和这个新对象的指针是pa1,或者它只是创建指针fo r a2,提前致谢

+2

请不要重复提问。此外,当你知道这是一个重复的事实(你问另一个)。 – 2010-06-15 07:47:00

回答

3

最后一行创建一个新的对象A,pa1指向它,其内容与a2中的相同。

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

+1

第二行可能是复制缩尺(尝试它) – 2010-06-15 06:49:02

+0

你是对的。我编辑了我的答案。 – PeterK 2010-06-15 06:54:40

2

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

在第2行,您正在复制a1

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

+0

第3行:您的意思是复制构造函数。 – Alan 2010-06-15 06:10:51

+0

请小心在上一段中如何使用术语“新” – 2010-06-15 06:50:13

2

第一行创建堆栈上的类(A1)的一个新实例(因此它的寿命被限制在当前的范围内)。使用的构造函数将取决于的类型i

第二行将在堆栈上创建A类的另一个实例(a2)。复制构造函数将被使用,所以如果复制操作是合理实现的(或默认的对你的类有意义),它将是源实例的副本(a1)。如果没有兼容的拷贝构造函数可以访问,则会发生编译器错误。

第三行返回一个指向分配在堆上的类A(pa1)的新实例的指针。它的生命周期必须明确管理,实际的对象可以超越指针本身的范围。与第二种情况一样,它使用复制构造函数进行复制。