我已经实现了一个指向对象的指针向量。当我在模板中指定的数据类型不是指针时,它的行为就像一个向量。我想用它来支持一些多态对象,所以我在模板中指定的数据类型必须是指针。我陷入了一个必须处理delete
向量中元素的方法,我不知道如何解决这个问题。
我将尝试用这个代表我所做的例子来说明我的观点:
template<typename _Tp>
class Vector{
private:
_Tp ** container ;
size_t size ;
size_t capacity ;
/*...*/
public:
Vector() : container (NULL) { /*...*/ }
Vector( int capacity ) {
container = new _Tp* [capacity] () ;
for ( int i = 0 ; i < capacity ; i++ )
container[i] = NULL ;
size = 0 ;
this->capacity = capacity ;
}
void deleteAt ( int position ) {
/*... Check bad position ...*/
delete ( container[position] ) ;
/*... move data ... */
}
void assignAt ( int position, const _Tp & obj ) {
/*... Check bad position and capacity ...*/
container[position] = new _Tp ( obj ) ;
size++ ;
}
/*... more methods ...*/
} ;
deleteAt(int)
被调用并且_Tp = SomeClass*
SomeClass 的析构函数从未被调用。我应该怎么做才能解决这个问题?
这是我使用向量的方式:
class Base () {/*... Astract class ...*/ } ;
class Derived1 () : public Base {/*... Implementation ...*/} ;
/*... More derived classes from Base ...*/
int main (void) {
Vector<Base*> * v = new Vector<Base*> (100) ;
v->assignAt(50,new Derived1 ()) ;
v->deleteAt(50) ;
}