如果您正在交换c字符串,内存分配是否也会交换?

时间:2014-08-26 05:22:30

标签: c++

假设我们有以下内容:

string_class s1("hello");
string_class s2("goodbye");

如果string_class字符串的内部表示是一个c字符串,那么在交换值时内存分配会发生什么?例如,假设string_class分配char* c_str_s1 = new char[5],但是char* c_str_s2 = new char[10](因为,比如5之后,大小加倍)。如果我们执行类似std::swap(c_str_s1, c_str_s2)的操作,是为每个交换的c字符串分配的内存,还是为每个c字符串分配的最小分配?

2 个答案:

答案 0 :(得分:3)

指针按原样交换:这意味着交换后它们中的每一个都将指向为另一个分配的内存。内存的内容不应该以任何其他方式改变。

答案 1 :(得分:2)

当您交换std::string时,它们在内部交换包括char*指针的字段,不执行任何分配。

编辑我错过了你没有使用std::string的观点,但无论如何你应该考虑这样做。