假设我们有以下内容:
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字符串分配的最小分配?
答案 0 :(得分:3)
指针按原样交换:这意味着交换后它们中的每一个都将指向为另一个分配的内存。内存的内容不应该以任何其他方式改变。
答案 1 :(得分:2)
当您交换std::string
时,它们在内部交换包括char*
指针的字段,不执行任何分配。
编辑我错过了你没有使用std::string
的观点,但无论如何你应该考虑这样做。