gpt4 book ai didi

c++ - 对象能否从标准 C++ 容器中删除自身?

转载 作者:可可西里 更新时间:2023-11-01 15:25:08 25 4
gpt4 key购买 nike

<分区>

下面的代码

#include <iostream>
#include <map>

struct foo
{
void kill(std::map<int, foo>& m, int i)
{
m.erase(i);
}
};

int main()
{
std::map<int, foo> m;

m.emplace(1, foo() );

std::cout << m.size() << std::endl;

m[1].kill(m, 1);

std::cout << m.size() << std::endl;
}

编译时没有警告 (g++),执行时没有错误,根据输出判断,kill 方法从 map 中删除了 foo 对象。但是,我觉得这实际上可能是未定义的行为。似乎在m.erase(i) this 行之后的kill 方法中不再指向有效对象。

C++ 标准对此有何规定?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com