删除指针向量的指针

时间:2012-08-22 13:50:39

标签: c++ templates pointers vector delete-operator

我正在尝试删除指向矢量的指针,但它包含指针(在某种程度上)

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必须是指针,因为它是从外部库方法返回的。

1 个答案:

答案 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);