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

dvr*_*rer 4 c++

是将a char从a 添加char*到a 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?
Run Code Online (Sandbox Code Playgroud)

小智 5

push_back函数的定义是

void push_back( CharT ch );    
Run Code Online (Sandbox Code Playgroud)

由于参数ch是通过值而不是通过引用传递的,因此它将被复制到字符串中,因此删除添加到字符串的char的源不会引起任何问题。


tas*_*oor 5

创建字符串后删除可以push_back复制数据。但是,更好的方法是简单地使用:

std::string data(buffer, buffer_size);
Run Code Online (Sandbox Code Playgroud)

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