我想知道如何在普通的C ++字符串中预分配和初始化字符序列。问题的出现在于查询Windows注册表中的值。有关示例代码,请参阅this answer。问题是系统调用写入由调用者分配的数组。我已经用分配的缓冲区解决了当前的问题,但是这个解决方案似乎是一个无关的字符串副本。这让我对一般性问题感到好奇,这个问题更多地针对图书馆作者,关于如何消除额外的操作。
constructors for std::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
函数返回预先分配的存储,并且只执行一次。据推测,这个类本身是通用的,用字符串分配器实例化(如示例中所示)。这似乎可行,但我确定我不明白这种方法的所有后果。