C ++奇怪的行为mutator向量

时间:2014-03-06 11:07:56

标签: c++ vector mutators

我一直在为学校工作,我们必须创建一个Client字符串,其中包含4个字符串,4个int和一个vector(int)作为最后一个参数。问题是,当我想打印所有向量的元素时,如果我直接使用我的mutator,那就是打印不存在。

vector<int> v_int;
vector<int>::iterator it_v_i;
v_int.push_back(2);
v_int.push_back(3);
v_int.push_back(7);
v_int.push_back(1);

Client client("nom1", "prenom1", "adress1", "city1", "comment1", 1240967102, 44522, 5, 10, v_int);

v_int = client.getIdResources();
for (it_v_i = v_int.begin(); it_v_i != v_int.end(); it_v_i++) {
    cout << *it_v_i << ", ";
}

按预期打印2,3,7,1,但以下代码

for (it_v_i = client.getIdResources().begin(); it_v_i != client.getIdResources().end(); it_v_i++) {
    cout << *it_v_i << ", ";
}

打印未识别的号码(如3417664 ...),身份不明的号码,7,1

我真的不明白为什么会发生这种情况

编辑:

构造函数:

Client::Client(const string& name, const string& surname, const string& adress, const string& city, const string& comment,
            const int& phoneNb, const int& postalCode, const int& termAppointment, const int& priority, const vector<int>& idResources)
                : name(name), surname(surname), adress(adress), city(city), comment(comment), phoneNumber(phoneNb),
                postalCode(postalCode), termAppointment(termAppointment), priority(priority), idResources(idResources)

{ }

Mutator:

std::vector<int> getIdResources() const{ return idResources; }

1 个答案:

答案 0 :(得分:3)

问题是,在第二个代码段中,两个临时vector用于获取begin()end()迭代器(假设声明为{{ 1}}而不是std::vector<int> client.getIdResources())。这意味着std::vector<int>& client.getIdResources()指的是被破坏的it_v_i的元素。取消引用std::vector时会导致未定义的行为。

要正确制作第二个代码段功能,it_v_i需要返回对std::vector的引用。但是,返回对内部类成员的引用会引入其他问题,例如生命周期问题。