构造函数初始化列表的奇怪情况

时间:2013-03-01 10:33:51

标签: c++ visual-c++ c++11 std

请考虑以下代码:

class class1
{

public:
    class1() : _cancel(false) { }

private:
    bool _cancel;

}

class class2
{

public:
    class1 obj1;
}


class class3
{
    void addClass2(class2 _obj2) {
        this->obj2.push_back(_obj2);
    }
private:
    std::vector<class2> _obj2;
}

并将其用于其他文件

void Init()
{

    class2 object2;
    class3 object3;
    object3.addClass2(object2);
}

class1的_cancel没有初始化为false

但是我在这里解决了这个问题:

//class3

void addClass2(class2 _obj2) {
    this->_obj2.push_back(std::move(_obj2));
}

我对此行为感到困惑。关于std::vector::push_back,我应该知道什么?

修改

很抱歉没有带我的代码副本。 我不在自己的电脑上,因为我没有互联网

在上面的class3实现中是错误的。所以这是新的

//class3

class class3
{
public:
    void addClass2(std::vector <class2> _obj) {
        this->_obj = _obj;
    }

}

1 个答案:

答案 0 :(得分:1)

此代码在stacked-crooked (gcc4.7)

上输出false

编辑我将bool改为int;与bool一起,理论上我们有50%的机会随机选择正确的值;使用int,它仍然可以正确输出42

#include <iostream>
#include <vector>
using namespace std;

class class1 {
public:
    class1() : _cancel(42) { }

    int _cancel;
};

class class2
{
public:
    class1 obj1;
};

class class3 {
public:
    void addClass2(class2 _obj2) {
        this->_obj2.push_back(_obj2);
    }

    std::vector<class2> _obj2;
};

int main() {
    class2 object2;
    class3 object3;
    object3.addClass2(object2);

    cout << object3._obj2[0].obj1._cancel << endl;
}