文档list::erase()说,"之前调用析构函数",这是什么意思?如果我想再购买erase(it)一件商品,那么push_back(*it)这件商品是否已经被破坏了?
是的,这将导致未定义的行为.一旦erase列表迭代器使迭代器失效,意味着它引用的对象不再保证有效.这意味着如果您尝试在任何上下文中使用迭代器,包括尝试取消引用该值以再次将其添加到列表中,则会导致未定义的行为,这可能导致程序崩溃,覆盖重要内存或什么都不做.
如果要将列表的元素移动到后面,请考虑使用列表的splice方法:
myList.splice(myList.end(), myList, it);
Run Code Online (Sandbox Code Playgroud)
这会将元素移动到最终而不进行复制.