-1

A オブジェクトのベクトルがあります。クラス A には、タイプ B のメンバー オブジェクトが含まれています。クラス B には、bool の静的に宣言された配列が含まれています。A オブジェクトをベクターにコピーすると、bool 配列の値が失われます。bool の配列は静的に宣言されているため、これは問題にならないはずですが。コピー コンストラクターを使用してこれを処理する必要がありますか?

class B
{
public:
    bool theArray[5] ;

    B(bool x) {theArray[1] = x;};
    B(){};

};

class A
{
public:
    B obj_B;

    A() : obj_B(1) {};
    A(A const &origin) : obj_B(origin.obj_B){};
};

int main () 
{
    std::vector <A> someAs;
    for(int q=0;q<10;q++)
        someAs.push_back(A());

    for(int q=0;q<10;q++)
        std::cout << someAs[q].obj_B.theArray[1] << std::endl;
}
4

1 に答える 1

2

これを行うためにコピー コンストラクターを定義する必要はありません。「静的配列」の意味がわかりません.2つの意味がありますが、どちらもコピーコンストラクターを必要としません.

「静的サイズの配列」を意味する場合は、次のようにします。

class MyClass {
private:
    bool myArray[137];
};

次に、デフォルトのコピーコンストラクターは、コピーされるオブジェクトから要素のメンバーごとのコピーを行います。

「ブール値の静的配列」を意味する場合は、次のようになります。

class MyClass {
private:
    static bool myArray[137];
};

この配列はクラスのすべてのインスタンスで共有されるため、コピー コンストラクターはこの配列に触れません。

s の配列がbool破損している場合は、メモリ破損のバグが発生している可能性があります。おそらく、配列の末尾を読み取ったり、不適切なポインターを逆参照したりすることによって発生します。デフォルトのコピー動作で実際に必要なものが得られるため、これを調べます。

于 2011-02-20T10:22:12.717 に答える