假设我有一个全局范围的集合,定义如下:
std::set<Person> people;
我有一个函数,可以创建类
Person
的实例,并将其添加到集合中,如下所示:
void addEntry() {
Person p1("kosh", 55);
people.emplace(p1);
}
按照我的理解,将创建对象的副本(我可以看到复制构造函数被调用)并添加到集合中。一旦该函数终止,
p1
就会超出范围。但是,添加到集合中的副本的范围是什么?这是由集合的范围决定的吗?
但是,添加到集合中的副本的范围是什么?这是由集合的范围决定的吗?
是的。 该副本位于
set
内部,当 set
被清除或销毁时,该副本也会被销毁。 除非您事先erase()
输入Person
条目。