我有点困惑有关之间的差异push_back和emplace_back.
void emplace_back(Type&& _Val);
void push_back(const Type& _Val);
void push_back(Type&& _Val);
Run Code Online (Sandbox Code Playgroud)
因为有一个push_back超载采用右值参考我不太明白目的是emplace_back什么?
当我使用STL向量存储类对象时,我观察到一个非常奇怪的副作用,其中push_back方法修改了现有数据!
基本上我有一个包含多个字段的类,如下所示:
class MyClass {
MyClass(std::string s, int i) {
StringValue = s;
IntValue = i;
}
std::string StringValue;
int IntValue;
}
Run Code Online (Sandbox Code Playgroud)
我有一个向量,其中包含指向 MyClass 对象的指针..然后我基本上推回对对象的引用:
std::vector<MyClass*> MyVector;
MyClass c1("CLASS 1", 1);
MyClass c2("CLASS 2", 2);
MyVector.push_back(&c1);
// Result:
// *MyVector[0] ==> ("Class 1", 1)
MyVector.push_back(&c2);
// Result:
// *MyVector[0] ==> ("Class 2", 2) ??why 2??
// *MyVector[1] ==> ("Class 2", 2)
Run Code Online (Sandbox Code Playgroud)
你看到我得到的奇怪结果了吗?我在每个push_back语句之后设置了断点,并且发生了这种奇怪的事情。
第一个 Push_back 语句工作正常。但是第二个push_back语句修改了第一个元素的内容,这对我来说没有意义。
我假设它与我存储引用而不是向量内的实际对象有关......但我无法弄清楚出了什么问题。
我该如何处理这个问题?有什么见解吗?
谢谢
更新:
(简化代码)
MyClass c1("CLASS 1", 1);
MyClass c2("CLASS …Run Code Online (Sandbox Code Playgroud)