将char添加到字符串中并删除char数组



是将charchar*添加到std::string,然后delete[] CHAR数组可能导致UB?

或在delete[]之后处理字符串是安全的吗?

int buffer_size = 4096;
char* buffer = new char[buffer_size];
//here there was removed code that assign values to the buffer[i]    
std::string data;
for (int i = 0; i < buffer_size ; i++)
{
    data.push_back(buffer[i]);
}
delete[] buffer;
//is the data string content secured at this point?

push_back函数的定义是

void push_back( CharT ch );    

由于参数CH是按值而不是参考传递的,因此将其复制到字符串中,因此删除您附加到字符串的字符的来源不会引起任何问题。

创建字符串后的删除很好,因为push_back复制了数据。但是,更好的方法是简单使用:

std::string data(buffer, buffer_size);

在循环中调用push_back可能会多次触发内存分配。但是,使用构造函数,整个buffer_size内存都会一次分配。

它是安全的。但是您也可以使用std :: string :: append(const char*s,size_t n);

您可以从std :: string :: push_back

的签名中看到
 void push_back( CharT ch );

复制函数参数。因此,将其复制到某个字符串后删除char拥有的任何资源是可以的。

请注意,您还可以避免通过

进行手动循环
data.insert(data.end(), buffer, buffer + buffer_size);

是的,因为您将字符从缓冲区复制到数据,因此在复制完成后两个变量之间没有链接。另外,您应该考虑将Char*复制到字符串的更有效的选项,例如此http://www.cplusplus.com/reference/string/string/string/poerator =/

最新更新