C++ using wstring/wchar_t

C++ using wstring/wchar_t

本文关键字:wchar using wstring C++      更新时间:2023-10-16

很多时候,每当我与人交谈时,他们都会让我不再使用(在 DLL 项目中)wstring 和字符串,因为它们消耗的内存比数组wchar_t多。怎么样?同一个L"qweqweqweqweqwe" wchar_t数组需要比 wstring 更多的内存还是不明显?现在当我必须在 Ansi 和 Unicode 之间转换时,我有点困惑(许多new wchar_t tempdelete

"许多新的wchar_t临时删除"

这通常是一个非常糟糕的主意。正如Stroustrup所说,您通常应该依靠对象来为您进行内存管理(查找RAII)。仅在真正必要时使用原始指针,并且仅在实现的深处使用原始指针。更喜欢 STL,更喜欢智能指针,使用 boost,编写新的和删除,只有在你真的需要并关心异常安全时才删除。否则,您将花费大部分时间调试代码。

答案是:除非你有很好的理由,否则请使用字符串类。内存使用量的差异通常微不足道。仅当探查器告诉您时才进行优化。"过早的优化是万恶之源"(Don Knuth)。

在典型用法中,您不会看到string/wstring和字符数组的内存使用量有显着差异。另一方面,如果你使用字符数组,你的代码很容易充满错误和泄漏,你将把所有的时间都花在处理这些上。

整个C++社区都认为std::string是处理字符串的方法。任何想要使用字符数组的特立独行者都应该被迫用基准测试来证明他们的观点。证明他们的观点的责任应该在怪胎身上。