-1

次のコードを検討してください。

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

ここの_cancelclass1 の は 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;
    }

}
4

1 に答える 1

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;
}
于 2013-03-01T10:44:22.707 に答える