类,指针,矢量和删除

时间:2012-05-26 18:00:14

标签: c++ pointers memory-management vector

假设我有:

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指向的内容。

1 个答案:

答案 0 :(得分:3)

  

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

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

  

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

你必须迭代每个向量的每个元素,并为每个向量调用delete