我在代码的某个地方调用了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带有正文的类A的析构函数:delete this;。 (我每次调用函数都会退出程序。)

最佳答案

这对我有用。不能将它与您的代码进行比较,因为它并不是您发布中的全部内容。

#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

07-25 21:53