C++ 向字符串添加字符并删除字符数组

C++ 向字符串添加字符并删除字符数组,c++,C++,是否将char从char*添加到std::string然后delete[]字符数组会导致UB 或者在删除[]之后处理字符串是否安全 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_s

是否将
char
char*
添加到
std::string
然后
delete[]
字符数组会导致UB

或者在
删除[]
之后处理字符串是否安全

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?
int buffer_size=4096;
char*buffer=新字符[buffer_size];
//这里删除了为缓冲区[i]赋值的代码
std::字符串数据;
对于(int i=0;i
它很安全。但是您也可以使用std::string::append(const char*s,size\u t n)

您可以从

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

注意,您还可以通过以下方式避免手动循环

data.insert(data.end(), buffer, buffer + buffer_size);

是的,这很好,因为您将字符从缓冲区复制到数据,所以在复制完成后,两个变量之间没有链接。此外,您应该考虑将char *复制到字符串中的更有效的选择,例如这一个

< p> PosichBuffing函数的定义是

void push_back( CharT ch );    

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

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

std::string data(buffer, buffer_size);

在循环中调用
push_back
,可能会多次触发内存分配。但是对于构造函数,整个
缓冲区大小
内存一次分配。

不,这很好。
std::string data(buffer, buffer_size);