C++ using wstring/wchar_t
C++ using wstring/wchar_t
很多时候,每当我与人交谈时,他们都会让我不再使用(在 DLL 项目中)wstring 和字符串,因为它们消耗的内存比数组wchar_t多。怎么样?同一个L"qweqweqweqweqwe"
wchar_t数组需要比 wstring 更多的内存还是不明显?现在当我必须在 Ansi 和 Unicode 之间转换时,我有点困惑(许多new wchar_t temp
和delete
)
"许多新的wchar_t临时删除"
这通常是一个非常糟糕的主意。正如Stroustrup所说,您通常应该依靠对象来为您进行内存管理(查找RAII)。仅在真正必要时使用原始指针,并且仅在实现的深处使用原始指针。更喜欢 STL,更喜欢智能指针,使用 boost,编写新的和删除,只有在你真的需要并关心异常安全时才删除。否则,您将花费大部分时间调试代码。
答案是:除非你有很好的理由,否则请使用字符串类。内存使用量的差异通常微不足道。仅当探查器告诉您时才进行优化。"过早的优化是万恶之源"(Don Knuth)。
在典型用法中,您不会看到string
/wstring
和字符数组的内存使用量有显着差异。另一方面,如果你使用字符数组,你的代码很容易充满错误和泄漏,你将把所有的时间都花在处理这些上。
整个C++社区都认为std::string
是处理字符串的方法。任何想要使用字符数组的特立独行者都应该被迫用基准测试来证明他们的观点。证明他们的观点的责任应该在怪胎身上。
相关文章:
- MacOS通过在莫哈韦"wchar.h"下破碎的自制啤酒发出叮当声
- "using namespace std;"在C++的作用是什么?
- vector<vector<double>> to mxArray using memcpy
- Using C++ CryptAPI:CNG Create CSR
- STLPort using C++11
- 函数中的 c++ using 语句,后跟函数名称(对于 ADL?
- Using getchar_unlocked()
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- 嵌套命名空间的"using"指令,但需要命名内部命名空间
- 为什么"using System;"不被视为不良做法?
- 为什么我需要做'using namespace std'而不是"使用 std::cout"?
- 'const char*'和'WCHAR*'
- 'using namespace'实现细节的便捷方法(仅标头库)?
- 为什么需要与 WCHAR 相关的代码处理
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- 在"template"和函数声明之间使用:template<typename trait> using tr = base_trait<trait> void fn(tr::t
- 如何区分C++中的"using declaration"和"using directive"?
- C++ "using tcp=x"到"namespace tcp=x"有什么区别
- 无法使用 mingw-w64 g++ 编译:找不到 <wchar.h>