我正在尝试删除指向矢量的指针,但它包含指针(在某种程度上)
struct TestObject
{
public:
// some values
};
template <typename T> class VectorObject
{
public:
T Object;
};
vector< VectorObject<TestObject*> > *pVector =
new vector< VectorObject<TestObject*> >();
TestObject *test = new TestObject;
VectorObject<TestObject*> testObject;
testObject.Object = test;
pVector->push_back(testObject);
vector<VectorObject<TestObject*>>::iterator i;
for (i = pVector->begin(); i != pVector->end(); i++)
{
delete * (i->Object);
}
delete pVector;
这不是它应该工作的方式吗?或者我必须改为:
vector< VectorObject < TestObject > *>?
要求
TestObject必须是指针,因为它是从外部库方法返回的。
答案 0 :(得分:1)
这就是你的代码应该是这样的:
vector< VectorObject<TestObject> > pVector;
VectorObject<TestObject> testObject;
pVector.push_back(testObject);
无需使用指针。
如果您收到外部方法的指针,您应该使用unique_ptr
来管理其生命周期:
vector< unique_ptr<TestObject> > pVector;
unique_ptr<TestObject> test(external_method());
pVector.push_back(test);