我在代码的某个地方调用了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