1

私が持っているとしましょう:

class A {
public:
    A(HWND hwnd, HWND hwnd2);
    ~A();

    int  i;
    HWND hwndFrame;
    HWND hwndCanvas;
    bool bool;

};

class B {
public:
    B(HWND hwnd);
    ~B();

    HWND hwndFrame;
    Vec<A *> vecA;  // class Vec is implemented by someone else.

};

私が作成したとしましょう:

A * elementA1 = new A(...);
A * elementA2 = new A(...);
B * element B = new B(...);
B->vecA.Append(A1);
B->vecA.Append(A2);

ある時点で、上記のオブジェクトをすべて削除したいと思います(したがって、それらはメモリに存在しなくなります)。

私はそれを行う方法が非常に混乱しています。

私の質問は次のとおりです。

  1. delete hwndFrameデストラクタを入れると~A();、本当に削除されますかdelete AhwndFrame

  2. デストラクタでは、ベクトルとその要素が指すコンテンツ、つまり、とが指すコンテンツを(メモリから)取得~B()するために私がしなければならないこと。deleteB->vecAA1A2

4

1 に答える 1

3

デストラクタ〜A();にdelete hwndFrameを配置した場合、Aを削除すると、hwndFrameは実際に削除されますか?

HWND不透明なポインタハンドルであるを削除しようとしてはいけません。DestroyWindow代わりに、実際に何をしたいかに応じて、同様の機能を呼び出すことができます。

デストラクタ〜B()で、ベクトルB-> vecAとその要素が指すコンテンツ、つまりA1とA2が指すコンテンツを(メモリから)削除するために必要なこと。

各ベクトルの各要素を反復処理し、それぞれを呼び出すdelete必要があります。

于 2012-05-26T18:03:57.940 に答える