首页
注册
登录
namehao 最近的时间轴更新
namehao
V2EX 第 380051 号会员,加入于 2019-01-25 11:45:14 +08:00
namehao
提问
技术话题
好玩
工作信息
交易信息
城市相关
namehao 最近回复了
2019-09-13 13:14:38 +08:00
回复了
alanlian
创建的主题
›
C++
›
关于 cpp 的 copy-and-swap idiom 的问题
@
alanlian
不客气
2019-09-13 11:39:53 +08:00
回复了
alanlian
创建的主题
›
C++
›
关于 cpp 的 copy-and-swap idiom 的问题
不加 friend 是可以编译成功的,这样的 swap 是类的一个成员函数,对于 operator=这样的操作也是没有问题的。
但是对于如果在类的外部调写这样的代码。比如在 main 函数中写:dumb_array a, b; std::swap(a, b);那么在 c++11 中是 c=move(a),a = move(b), b = move(c)这样的操作,因为 dumb_array 没有写移动构造和移动赋值函数,就导致会调用拷贝构造函数。
这样导致的问题就是,swap 本来可以直接将类内的数组指针值进行替换,却多构造了一个临时数组,来进行换值操作。
当把 swap()写成 friend 之后,swap 就成了 std::swap()的一个重载函数,当在 main 中进行 std::swap(a,b)调用的时候,调用到的就是作为 friend 函数的 swap,也就是 std::swap()的定制版。这样就是直接将类内的指针进行交换,而不用进行额外的拷贝构造函数的调用。
不知这样,讲明白了没有。
»
namehao 创建的更多回复
关于
·
帮助文档
·
博客
·
API
·
FAQ
·
实用小工具
·
1406 人在线
最高记录 6679
·
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 11ms ·
UTC 17:29
·
PVG 01:29
·
LAX 10:29
·
JFK 13:29
Developed with
CodeLauncher
♥ Do have faith in what you're doing.