new 出来的vector ,需不需要delete?解决思路

new 出来的vector ,需不需要delete?
#include <vector>
#include <iostream>
using namespace std;

int i = 0;
int j = 0;

class CDemo{
public:
CDemo():str(NULL){
cout << "constructor:" << i++ << endl;
}

CDemo(const CDemo& cd)
{
cout << "copy constructor:" << i++ << endl;
this->str = new char[strlen(cd.str) + 1];
strcpy(this->str, cd.str);
}

~CDemo(){
cout << "destructor:" << j++ << endl;
if(str)
{
delete [] str;
str = NULL;
}
}

char* str;
};

void main()
{
CDemo d1;
d1.str = new char[32];
strcpy(d1.str, "trend micro");

vector<CDemo> *a1 = new vector<CDemo>();
a1->push_back(d1);
delete a1;
a1 = NULL;

getchar(); // 输入s

return;
}

new 出来的vector ,需不需要delete?解决思路
上面是代码和运行结果,好奇怪new出来的a1在delete之后,main函数退出的时候似乎又执行了一次。哪位大大给我解释一下,谢谢啦。
------解决方案--------------------
你贴出的结果很正常,delete也没有问题。因为你有两个CDemo对象
------解决方案--------------------
a1->push_back(d1);
vector会拷贝一个CDemo
delete的时候会调用这个CDemo的析构
main函数退出的时候d1这个局部变量当然要析构掉