-1

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

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

4

1 回答 1

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);
于 2012-08-22T13:56:45.270 回答