1
nightwitch 2022-10-08 23:27:12 +08:00 via Android
语意上不适合拷贝的就会禁用 copy 。比如复制一个 socket 不会打开两个连接,复制一个 fd 也不会打开两次文件。或者拷贝代价很大的也可能会禁用,但是一般会提供移动构造以转移所有权,没有的话就只能用指针管理了
|
2
wevsty 2022-10-08 23:34:28 +08:00
不适合提供拷贝的对象都可能会把拷贝构造函数写成私有(或者标记为删除)。
一部分是语义上不应该复制的对象会删除拷贝构造,2L 说的很明确。 还有一部分也可能是为了避免产生隐式的复制影响速度就干脆删除拷贝构造函数,这样产生隐式拷贝的时候编译会报错提醒。 |
3
Noicdi 2022-10-08 23:36:02 +08:00 via iPhone
类不适用拷贝构造会设置私有,不设置的话编译器会提供默认拷贝构造函数,现在应该更倾向于用 delete 向编译器明确拒绝拷贝构造函数
|
4
secondwtq 2022-10-08 23:37:56 +08:00 1
这是 C++11 之前的老套路,想要禁止用户拷贝类的实例就把 copy-ctor 扔 private 里面。
C++11 有了 =delete ,就基本没人这么用了(当然还是可以达到“只让类自己的成员函数调用”的目的 ...) 因为 C++11 基本早就普及了,楼主可能学的时候不知道这码事 |
5
secondwtq 2022-10-08 23:39:41 +08:00
哦对,这库应该也是支持 C++98 的,所以可能省了个事选择用兼容性好的方法
|
6
ysc3839 2022-10-08 23:43:26 +08:00 via Android
防止意外拷贝消耗性能,要不然 move ,要不然显式拷贝。
|
7
dangyuluo 2022-10-09 05:48:22 +08:00
估计还是老代码,moden C++里面的做法应该是
``` TYPE& operator=(const TYPE&) = delete; ``` |
8
jones2000 2022-10-09 13:47:39 +08:00
单件
|