如果我有代码的这个片断
A a1(i);
A a2 = a1;
A *pa1 = new A(a2);
可以请人确切地解释的最后一行做什么,它使a2的副本和这个新对象的指针是pa1,或者它只是创建指针fo r a2,提前致谢
如果我有代码的这个片断
A a1(i);
A a2 = a1;
A *pa1 = new A(a2);
可以请人确切地解释的最后一行做什么,它使a2的副本和这个新对象的指针是pa1,或者它只是创建指针fo r a2,提前致谢
最后一行创建一个新的对象A,pa1指向它,其内容与a2中的相同。
我相信这个例子演示了使用带有参数(第一行),拷贝构造函数(第二行)和另一个拷贝构造函数(最后一行)的构造函数。最后,所有三个对象都将具有相同的内容。
第二行可能是复制缩尺(尝试它) – 2010-06-15 06:49:02
你是对的。我编辑了我的答案。 – PeterK 2010-06-15 06:54:40
在第1行中,您将创建一个A
对象,调用A
构造函数,传入1
,并将其指定给a1
。
在第2行,您正在复制a1
。
在第3行,您要创建一个新的A
对象,调用A
拷贝构造函数,传入复制的对象a1
,并在内存中返回一个指针到该对象。
第3行:您的意思是复制构造函数。 – Alan 2010-06-15 06:10:51
请小心在上一段中如何使用术语“新” – 2010-06-15 06:50:13
第一行创建堆栈上的甲类(A1)的一个新实例(因此它的寿命被限制在当前的范围内)。使用的构造函数将取决于的类型i。
第二行将在堆栈上创建A类的另一个实例(a2)。复制构造函数将被使用,所以如果复制操作是合理实现的(或默认的对你的类有意义),它将是源实例的副本(a1)。如果没有兼容的拷贝构造函数可以访问,则会发生编译器错误。
第三行返回一个指向分配在堆上的类A(pa1)的新实例的指针。它的生命周期必须明确管理,实际的对象可以超越指针本身的范围。与第二种情况一样,它使用复制构造函数进行复制。
请不要重复提问。此外,当你知道这是一个重复的事实(你问另一个)。 – 2010-06-15 07:47:00