例如,请考虑以下代码。
string str = "Alice ate apples";
str.erase(0, 2)
擦除功能是否实际分配新内存并复制" ice ate apples"或擦除功能是否进行就地复制?
答案 0 :(得分:7)
basic_string
实现使erase
的迭代器形式抛出异常是非法的。甚至只有erase
的索引形式才会在您提供超出范围的索引时抛出。
这很重要,因为分配内存是一种潜在的抛出操作。因此,如果erase
无法抛出,则它也不能分配。所以它没有。
因此,擦除必须就地发生。