给指向类类型指针赋值时为什么不调用复制构造函数?

时间:2021-02-21 20:05:19
C++primer 习题13.3, 指出下面程序段中每一个使用了复制构造函数的地方。
Point global;

Point foo_bar(Point arg){ ①
  Point local = arg; ②
  Point *heap = new Point(global); ③
  *heap = local; 
  Point pa[4] = {local④, *heap⑤};
  return *heap;⑥
}

问题:为什么*heap=local没有使用? 难道不是把local复制给heap指向的对象吗??为什么没用到!!

6 个解决方案

#1


这里用的不是拷贝构造,而是拷贝赋值。

调用的是 operator=

#2


引用 1 楼 fefe82 的回复:
这里用的不是拷贝构造,而是拷贝赋值。

调用的是 operator=


但这两者一般都是一起用的不是吗?
Point local = arg 这句是同时使用了拷贝构造和opretor= 对吗
我不懂*heap=local 和Point local = arg本质上有什么区别呢?

#3


引用 1 楼 fefe82 的回复:
这里用的不是拷贝构造,而是拷贝赋值。

调用的是 operator=


啊我懂了 谢谢。

#4


楼主,你的写法有问题吧
local 为Point 类型,heap 为Point指针类型,这两个是不能赋值呢
而且指针赋值,传的是地址,不是对象内容,并不会调用拷贝和赋值,如果是对象赋值会调用赋值

#5


构造意味着对象不存在, 出现应该是对象定义的地方, *heap已经不是定义了

#6


引用 2 楼 Alex_jing921111 的回复:
Quote: 引用 1 楼 fefe82 的回复:

这里用的不是拷贝构造,而是拷贝赋值。

调用的是 operator=


但这两者一般都是一起用的不是吗?
Point local = arg 这句是同时使用了拷贝构造和opretor= 对吗
我不懂*heap=local 和Point local = arg本质上有什么区别呢?


Point local = arg 是初始化 (initialize) ,不是赋值,不会调用拷贝赋值,只调用拷贝构造。

#1


这里用的不是拷贝构造,而是拷贝赋值。

调用的是 operator=

#2


引用 1 楼 fefe82 的回复:
这里用的不是拷贝构造,而是拷贝赋值。

调用的是 operator=


但这两者一般都是一起用的不是吗?
Point local = arg 这句是同时使用了拷贝构造和opretor= 对吗
我不懂*heap=local 和Point local = arg本质上有什么区别呢?

#3


引用 1 楼 fefe82 的回复:
这里用的不是拷贝构造,而是拷贝赋值。

调用的是 operator=


啊我懂了 谢谢。

#4


楼主,你的写法有问题吧
local 为Point 类型,heap 为Point指针类型,这两个是不能赋值呢
而且指针赋值,传的是地址,不是对象内容,并不会调用拷贝和赋值,如果是对象赋值会调用赋值

#5


构造意味着对象不存在, 出现应该是对象定义的地方, *heap已经不是定义了

#6


引用 2 楼 Alex_jing921111 的回复:
Quote: 引用 1 楼 fefe82 的回复:

这里用的不是拷贝构造,而是拷贝赋值。

调用的是 operator=


但这两者一般都是一起用的不是吗?
Point local = arg 这句是同时使用了拷贝构造和opretor= 对吗
我不懂*heap=local 和Point local = arg本质上有什么区别呢?


Point local = arg 是初始化 (initialize) ,不是赋值,不会调用拷贝赋值,只调用拷贝构造。