0

次のように定義されたクラスがあります。

class ExampleClass
{
public:
ExampleClass(HWND hwnd);
~ExampleClass();
    ....
    ....
    ....
}

会員数が多いもの。その後、2 つのポインターを作成しました。

ExampleClass *example1 = new ExampleClass(hwndFrame1);
ExampleClass *example2 = new ExampleClass(hwndFrame2);

ここでhwndFrame1hwndFrame2は、2 つの異なるウィンドウのハンドルです。

ある時点で、 と が指すこれら 2 つのクラスのすべてのメンバーの値を同期する必要がありexample1ますexample2。もちろん、メンバーごとにこれを行うこともできます。しかし、これに対する「ワンゴー」ソリューションがあるのだろうか。

4

2 に答える 2

2

私が提案するさらなる情報がない:

*example2 = *example1;

コンパイラで宣言されたコピー代入演算子を使用している場合ExampleClass、これはメンバーごとのコピーを行う必要があります。それ以外の場合は、「適切なこと」を行う必要があります。明らかに、指している 2 つのオブジェクトは、この後、下にある同じウィンドウを参照します。

于 2012-08-19T09:26:03.720 に答える
0

Charles Bailey の回答に加えて、次のようにして、2 つのオブジェクトの同期を自分で実装することもできます。

memcpy(example2, example1, sizeof(ExampleClass));

その後、次のように、最終的にウィンドウ ポインターを元に戻すことができます (これらも同期したくない場合)。

HWND wnd = example2->window;
memcpy(example2, example1, sizeof(ExampleClass));
example2->window = wnd;

これを ExampleClass コピー代入演算子で実装できますが (Charles Bailey が提案したように)、ウィンドウ ポインターを代入しないため、実際の代入ではないため、これはお勧めしません。代わりに、別の関数またはメソッドで実装してください。これは一般に、両方のオブジェクトがまったく同じクラスである場合にのみ機能することに注意してください!

于 2012-08-19T09:40:37.180 に答える