我想知道如何在普通 C++ 字符串中预分配和初始化字符序列。提出这个问题的场合是查询 Windows 注册表中的值。看这个答案 https://stackoverflow.com/a/16304707/1794538一些示例代码。问题在于系统调用写入由调用者分配的数组。我已经通过分配的缓冲区解决了眼前的问题,但是这个解决方案似乎有一个无关的字符串副本。这让我对这个普遍问题感到好奇,这个问题更适合库作者,即如何消除额外的操作。
The 构造函数std::basic_string http://en.cppreference.com/w/cpp/string/basic_string/basic_string不要包含执行此操作的明显方法。在很多方面我希望有一个带有std::unique_ptr
吸收指针后面的分配作为其内部存储的参数。我正在考虑这样的示例代码:
size_t len;
// ... Determine len
std::string::allocator_type a = std::string::allocator_type();
std::unique_ptr< char_t[] > p( a.allocate( len ) );
// ... Copy characters to p
std::string s( p, len, a ); // constant-time constructor
这不起作用,因为没有这样的构造函数。问题是如何实现这样一个构造函数。
看来正确的方法是定义一个自定义分配器,其allocate
函数返回预分配的存储空间,并且仅执行一次。据推测,这个类本身是通用的,用字符串分配器实例化(如示例中所示)。这似乎可行,但我确信我不理解该方法的所有后果。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)