假设我有:
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);
在某些时候,我想删除所有上述对象(因此它们不再存在于内存中)。
我很困惑怎么做。
我的问题是:
如果我将delete hwndFrame
放入析构函数~A();
,那么当我delete A
时,hwndFrame
是否真的被删除了?
在析构函数~B()
中,为了delete
(从内存中)向量B->vecA
及其元素指向的内容,即我必须做的事情,即A1
和A2
指向的内容。
答案 0 :(得分:3)
如果我将删除hwndFrame放在析构函数~A();中,那么当我删除A时,hwndFrame是否真的被删除了?
您不应该尝试删除HWND
,它是一个不透明的指针句柄。您可以改为调用DestroyWindow
或类似功能,具体取决于您真正想要做的事情。
在析构函数~B()中,为了删除(从内存中)向量B-> vecA及其元素指向的内容,即A1和A2指向的内容,我必须做什么。
你必须迭代每个向量的每个元素,并为每个向量调用delete
。