gpt4 book ai didi

c++ - STL 容器是否使用隐式共享?

转载 作者:可可西里 更新时间:2023-11-01 17:16:16 24 4
gpt4 key购买 nike

众所周知,Qt 小部件使用 implicit sharing .所以我对 STL 容器 std::vectorstd::string 是否也使用隐式共享感兴趣。

如果不是,为什么?因为它非常有用。

如果答案是肯定的,我们如何确定呢?我需要简单的 C++ STL 程序,它表明 STL 容器使用隐式共享。复制时它不进行深度复制。

最佳答案

没有。他们不能。当您尝试修改容器的内容,或者甚至在其上调用可变 begin() 时,这将意味着潜在的写时复制,从而使对容器的所有引用和迭代器无效。这将是一种难以调试的情况,因此是被禁止的。

尽管 std::string 在技术上不是容器,但从 C++11 开始它仍然被禁止进行写时复制:

References, pointers, and iterators referring to the elements of a basic_string sequence may be invalidated by the following uses of that basic_string object:
...
— Calling non-const member functions, except operator[], at, front, back, begin, rbegin, end, and rend.

[字符串要求]

... Since it is very useful.

嘿,干什么?通过引用传递几乎总能解决所有“性能问题”。原子引用计数在多处理器机器上本质上是不可扩展的。

关于c++ - STL 容器是否使用隐式共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14716053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com