c++ - Deleting and object in a polymorphic array of pointers -


i have implemented vector of pointers objects. when data types specify in template not pointers behaves vector. use in order support polymorphic objects, data type specify in template has pointer. got stuck in method has delete element in vector, , don't know how fix that.
try make point example represents i've done:

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] () ;         ( int = 0 ; < 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 , capacity ...*/          container[position] = new _tp ( obj ) ;          size++ ;     }     /*... more methods ...*/  } ; 

deleteat(int) called , _tp = someclass* destructor of someclass never called. should fix this?


this way use vector:

class base () {/*... astract class  ...*/ } ;  class derived1 () : public base {/*... implementation ...*/} ; /*... more derived classes base ...*/  int main (void) {     vector<base*> * v = new vector<base*> (100) ;      v->assignat(50,new derived1 ()) ;      v->deleteat(50) ;  } 

if code stores pointer object, not task (in container) delete object itself. whole point storing pointed-to object don't want store object itself, pointer object. it's same thing if have vector<myclass *> v; - don't want myclass* in vector destryed [or @ least, if want it, you'll disappointed].

now, if user of vector wishes happen (s)he should store unique_ptr or shared_ptr in container, not basic pointer.


Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

c++ - End of file on pipe magic during open -