1
0x11901 2019-04-23 19:05:45 +08:00
引用了解下。
|
9
0x11901 2019-04-23 19:19:02 +08:00 1
@lhx2008 那应该就是标准委员会的老人们觉得没必要,各种特性争了这么多年了都没有进 c++标准,但是你可以自己实现。
|
11
exonuclease 2019-04-23 19:21:15 +08:00 via iPhone 1
因为你可以重载索引操作符和拷贝构造函数自己折腾一个啊
|
12
0x11901 2019-04-23 19:24:22 +08:00 1
@lhx2008 如果你没有用 c++17 标准的"copy elision",完全很有可能在返回时触发拷贝构造,编译器不会优化你明确指出想要拷贝构造的地方。
|
13
secondwtq 2019-04-23 19:41:39 +08:00 2
C++11 已经不允许 COW string 了。
这种问题得从 C++ 特色去考虑:COW 在修改时会 invalidate 掉 iterator 和 reference |
14
msg7086 2019-04-23 22:01:09 +08:00
因为 C 和 C++设计上就是允许你进行非常底层的操作的?
是否 Copy 完全要看调用者的需求,而不是自动处理吧。 |
15
lhx2008 OP @msg7086 事实就是这么残酷,有些时候栈上分配的部分必须 Copy。
一个方法是再用一个(智能)指针指向堆上内存,然后 Copy 的只是只用 Copy 指针,开销小一点。 如果用 COW 的话,栈上也是要复制的(很少),只是堆上部分复不复制看情况。 |
16
blinue 2019-04-23 22:22:22 +08:00 via Android 1
c++11 引入的移动构造和赋值事实上足以解决很多问题,更何况 cow 的引入会使迭代器的复杂度倍增,原罪在于指针!
|
17
lynskylate 2019-04-24 02:02:01 +08:00 via Android
string 的 cow 已经被认为是失败的设计了
|
18
iceheart 2019-04-24 07:03:17 +08:00 via Android
既然你有这需求了,为啥不自己实现一个这样的容器?
做好了再拿出来去打标准委员会的脸。 |
19
shihira 2019-04-24 09:19:38 +08:00 via Android
如果在业务中有这样的需求,或者拷贝成为了性能瓶颈,你可以自己写一个这样的 vector 也不费什么劲,但这不适合作为标准库。标准库就是要逻辑清晰、行为有可预见性,过早优化是万恶之源
|
20
Skypemifan 2019-04-24 15:18:37 +08:00
COW 是指写时拷贝复制吗??
|