当我查看在 gcc 中实现 std::string 的方式时,我注意到 sizeof(std::string) 完全等于指针的大小(x32 构建中为 4 个字节,x64 为 8 个字节)。由于字符串应该保存一个指向字符串缓冲区的指针,并且它的长度是最小的,这让我认为 GCC 中的 std::string 对象实际上是一个指向保存这些数据的一些内部结构的指针。
因此,当创建新字符串时,应该进行一次动态内存分配(即使字符串为空)。
除了性能开销之外,这还会导致内存开销(当我们分配非常小的内存块时会发生这种情况)。
所以我只看到这种设计的缺点。我错过了什么?这样做的好处是什么?首先这样做的原因是什么?