c++ - deleting object pointer referring by two pointers -
i have object say.
classa *obj1 = new classa; classa *ptr1 = obj1; classa *ptr2 = obj1; when delete ptr1;, affect ptr2? if can correct solution this?
(assuming obj2 supposed obj1)
classa *x defines pointer can point objects of type classa. pointer isn't object itself.
new classa allocates (and constructs) actual object of type classa.
so line class *obj1 = new classa; defines pointer obj1 , sets point newly allocated object of type classa.
the line class *ptr1 = obj1; defines pointer ptr1 , sets point same thing obj1 pointing to, is, classa object created.
after line class *ptr2 = obj1;, have 3 pointers (obj1, ptr1, ptr2) pointing same object.
if delete ptr1; (or equivalently, delete obj1; or delete ptr2;), destroy pointed object. after doing this, pointer pointing object made invalid (which answers first question: yes, affect ptr2 in sense ptr2 won't pointing valid object afterwards).
the correct solution depends on you're trying achieve:
- if want 2 copies of object, assuming
classahas copy constructor,classa *ptr2 = new classa(*obj1);. needdeletenew object separately when done it! - if want 2 pointers same object, consider using
boost::shared_ptr(google it)
hmm, that's alot of text such simple q+a. ah well.
Comments
Post a Comment