-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 は、外部の Library メソッドから返されるため、ポインターである必要があります。

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 に答える