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 A,做hwndFrame真的被删除了吗?

  2. 在析构函数~B()中,为了delete(从内存中)向量B->vecA及其元素指向的内容,即A1A2指向的内容,我必须做些什么。

4

1 回答 1

3

如果我把delete hwndFrame放在析构函数~A();中,那么当我delete A时,hwndFrame真的被删除了吗?

您不应该尝试删除 a HWND,它是一个不透明的指针句柄。您可以改为调用类似DestroyWindow或类似的功能,具体取决于您真正想做的事情。

在析构函数~B() 中,为了(从内存中)删除向量B->vecA 及其元素指向的内容,即A1 和A2 指向的内容,我必须做些什么。

您必须遍历每个向量的每个元素,并调用delete它们中的每一个。

于 2012-05-26T18:03:57.940 回答