相关疑难解决方法(0)

push_back vs emplace_back

我有点困惑有关之间的差异push_backemplace_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什么?

c++ stl visual-studio-2010 move-semantics c++11

684
推荐指数
7
解决办法
29万
查看次数

C++ 矢量 Push_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)

c++ pointers reference vector

0
推荐指数
1
解决办法
1107
查看次数