深度探索:vector中存放类与类指针的区别
请大家看下边的代码:
MyTest * pMyTest,* pNewTest;
vector<MyTest> vecTest;
vector<MyTest>::iterator iter;
CString str;
for(int i=0;i<5;i++)
{
pMyTest = new MyTest();
pMyTest->a += i;
pMyTest->b += i;
pMyTest->c += i;
vecTest.push_back(*pMyTest);
// (A)
delete pMyTest;
}
for(iter = vecTest.begin(); iter!=vecTest.end();iter++)
{
pNewTest = &(*iter);
if(pNewTest->a == 4)
{
str.Format("a:%d;b:%d;c:%d",pNewTest->a,pNewTest->b,pNewTest->c);
m_list.AddString(str);
}
}
for(iter = vecTest.begin(); iter!=vecTest.end();iter++)
{
pNewTest = &(*iter);
//vecTest.erase(iter);
delete pNewTest; //这里出错
}
如果我将vector<MyTest>换成vector<MyTest*>则可以正常删除,所以我想知道vector<MyTest>和vector<MyTest*>的区别。如果是vector<MyTest>,是不是在vector内部创建了一个MyTest的对象,而无须手动delete?我在(A)处删除了new出来的对象,下面的操作仍然可以正常进行。
我的疑问是:vector<MyTest>中的对象是不是不需要手工删除?而由vector自己控制?
谢谢大家。