【问题标题】:weird case of constructor initialization list [closed]构造函数初始化列表的奇怪案例[关闭]
【发布时间】:2013-02-15 19:53:08
【问题描述】:

考虑以下代码:

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;
    }

}

【问题讨论】:

  • 太糟糕了,它不是一个可编译的例子。现在我正在浪费时间将它们合二为一。另外,复制构造函数?
  • 对我来说看起来不错;请发布证明它没有被初始化为假的代码。
  • 如果您想获得相关答案,请确保阅读this
  • 你是addClass2 的新版本,将向量作为参数,你用class2 调用它。这真的是你在做的吗?
  • 不,应该是std::vector。我想我应该再重写一次。

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


【解决方案1】:

此代码在stacked-crooked (gcc4.7) 上输出false

EDIT 我将 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;
}

【讨论】:

  • 我很抱歉我的代码,但我认为这不是它的实现方式。它对其他类有其他依赖项和多重继承。我明天可能会回来重新重写。不过谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
相关资源
最近更新 更多