【问题标题】:Class, pointer, vector and delete类、指针、向量和删除
【发布时间】:2012-06-01 20:55:30
【问题描述】:

假设我有:

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-&gt;vecA及其元素指向的内容,即A1A2 指向。

【问题讨论】:

  • hwndFrame 不是指针类型;你不能在上面调用delete...

标签: c++ pointers memory-management vector


【解决方案1】:

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

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

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

您必须遍历每个向量的每个元素,并为每个元素调用delete

【讨论】:

    猜你喜欢
    • 2020-03-27
    • 2013-09-24
    • 2012-08-12
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    相关资源
    最近更新 更多