c++ - determining if templated type is dynamic -
i writing template of working class, , might dumb question, if have template structure (linked list) hold possibly pointers objects how know being deleted, or pointers in first place?
for example: linkedlist used in 2 ways in program
a pointer object of class thing placed inside node inside linkedlist
an enum placed inside node inside linkedlist
i know nodes being deleted, how know thing in node pointer can deleted well, , not null referenced object?
you can specialize node based on type of object, , pointer specialization, create destructor node-type allocates , deletes pointer managed node.
for instance:
//general node type non-pointer types template<typename t> struct linked_list_node {     t data;     linked_list_node<t>* next;      linked_list_node(const t& d): data(d), next(null) {}     ~linked_list_node() {}  };  //specialized version pointer types template<typename t> struct linked_list_node<t*> {     typedef void (*deleter)(t*);      t* data;     linked_list_node<t>* next;     deleter d_func;  //custom function reclaiming pointer-type      linked_list_node(const t& d): data(new t(d)), next(null), d_func(null) {}      linked_list_node(const t& d, deleter func): data(new t(d)),                                                  next(null), d_func(func) {}     ~linked_list_node()      {         if(d_func)             d_func(data);  //execute custom function reclaiming pointer-type         else             delete data;     } }; you can instantiate different versions passing correct template argument when creating instance of linked_list_node type.  instance,
linked_list_node<myptr*> node(fooptr); //creates specialized ptr version linked_list_node<myenum> node(fooenum); //creates non-ptr version of node 
Comments
Post a Comment