
1 0x11901 2019-04-23 19:05:45 +08:00 引用了解下。 |
9 0x11901 2019-04-23 19:19:02 +08:00 @lhx2008 那应该就是标准委员会的老人们觉得没必要,各种特性争了这么多年了都没有进 c++标准,但是你可以自己实现。 |
11 exonuclease 2019-04-23 19:21:15 +08:00 via iPhone 因为你可以重载索引操作符和拷贝构造函数自己折腾一个啊 |
12 0x11901 2019-04-23 19:24:22 +08:00 @lhx2008 如果你没有用 c++17 标准的"copy elision",完全很有可能在返回时触发拷贝构造,编译器不会优化你明确指出想要拷贝构造的地方。 |
13 secondwtq 2019-04-23 19:41:39 +08:00 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 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 是指写时拷贝复制吗?? |