0

我在代码中的某个地方调用:A* p = new A;我将指针 p 放在一个向量中。

现在我想删除指针和指针指向的类。像这样:

A* p = getpointerfromvector(index); // gets the correct pointer

从向量中删除指针:

vector.erase(vector.begin()+index)

现在我想删除指针指向的类并将其删除。

delete p; // (doest work: memorydump)  

p->~A使用~A带有 body: 的 A 类的析构函数delete this;。(每当我调用该函数时,我的程序都会退出。)

4

1 回答 1

2

这对我有用。无法将其与您的代码进行比较,因为它并非全部在您的帖子中。

#include <stdio.h>
#include <vector>

using std::vector;

class A
{
public:
    A() {mNum=0; printf("A::A()\n");}
    A(int num) {mNum = num; printf("A::A()\n");}
    ~A() {printf("A::~A() - mNum = %d\n", mNum);}
private:
    int mNum;
};

int main ()
{
    A *p;
    vector <A*> aVec;
    int i, n=10;
    for (i=0; i<n; i++)
    {
        p = new A(i);
        aVec.push_back(p);
    }
    int index = 4;
    p = aVec[index];
    aVec.erase(aVec.begin()+index);
    delete(p);
}

输出:

A::A()
A::A()
A::A()
A::A()
A::A()
A::A()
A::A()
A::A()
A::A()
A::A()
A::~A() - mNum = 4
于 2013-11-13T17:08:10.973 回答