我的一位同事声称std::string
的实施,特别是内存管理不如Qt库中的QString
。 std::string
的哪些方面也可以引用?
答案 0 :(得分:13)
关于内存管理,QString
使用copy-on-write,现在在C ++标准库中明确禁止。但这是有原因的。写时复制习语在多线程环境中表现更差,因为它需要同步。 This article更详细地讨论了这些问题。
另一方面,std::string
的实现通常使用小字符串优化(SSO)来避免小字符串的任何动态内存分配。这是字符串的当前最新技术。
答案 1 :(得分:1)
通过内存管理,您必须确定哪种方式更适合您的应用程序。但是,与std :: string相比,QString明显闪耀的一个地方是unicode支持。 QString在内部存储UTF-16编码的字符串,而std :: string是编码不可知的。当你必须处理用户提供的多字节编码字符串时,这通常使得使用QString而不是std :: string变得更加简单。