std :: string :: assign是否取得字符串的"所有权"?

Fir*_*his 25 c++ string

我对string::assign方法的理解存在一些差距.请考虑以下代码:

char* c = new char[38];
strcpy(c, "All your base are belong to us!");
std::string s;
s.assign(c, 38);
Run Code Online (Sandbox Code Playgroud)

是否s.assign分配新缓冲区并将字符串复制到其中,或者它是否拥有指针的所有权; 即不分配新内存并直接使用我的地址.如果它复制,那么assign和之间的区别是operator=什么?如果它没有复制,那么它是否释放内存或者我的责任?

谢谢.

Kon*_*rad 30

s.assign是否分配新缓冲区并将字符串复制到其中,或者它是否拥有指针的所有权;

STL字符串方法assign将字符数组复制到字符串中.如果字符串中已经分配的缓冲区不足,它将在内部重新分配内存.STL字符串不会取得原始数组的所有权.

如果它复制,那么assign和operator =之间有什么区别?

两者都应该以相同的方式起作用,但STL分配方法有许多重载,可以让您更好地控制发生的事情.请查看此页面以获取更多信息.

更新:MSDN有许多各种assign过载的例子.

如果它没有复制,那么它是否释放内存或者我的责任?

不,指向字符数组的原始指针仍然是您的责任.


A. *_*evy 15

它复制.assignoperator =之间的区别在于您可以指定要复制的字符数,包括空字符.operator =只是将c-string复制到第一个空字节.