分配一个stl容器是否安全?

Lai*_*uan 5 c++ stl variable-assignment

例如:

set<int> s1;
set<int> s2;
s1.insert(1);
s2.insert(2);
s1 = s2;
Run Code Online (Sandbox Code Playgroud)

安全吗?如果是这样,旧元素(以及它们发生的内存)来自哪里?

iam*_*ind 6

是的,完成任务是安全的.它调用复制构造函数或赋值运算符,旧元素被删除s1并被元素替换s2.

[注意:如果本来任何潜在的问题,然后拷贝构造函数和任务将被禁止像fstream,ofstream,ifstream.]


jco*_*der 5

是.旧元素将以通常的方式被销毁并释放任何内存.(当然像往常一样,如果你将指针存储在容器中,它只会破坏指针,并且不会释放它所指向的东西)

  • Afaik这实际上是错误的.`s1 = s2`只复制s2中的元素并将它们放在s1中.只有在到达块的末尾时才会销毁这两个对象. (2认同)

Luk*_*sen 4

是的,你的例子是安全的。但请注意:您不是将 s2 分配给 s1,而是将 s2 复制到 s1。有关更多信息,请参阅:set::operator=

  • @flexo,但它**是** C++ 语言标准所称的。 (2认同)
  • @flexo:这不是*赋值运算符,因为还有*复合*赋值运算符(`+=`等),并且自2011年以来,*移动*赋值运算符。 (2认同)