c++ - Is destructor called when removing element from STL container? -


say have 2 containers storing pointers same objects:

std::list<foo*> foolist; std::vector<foo*> foovec; 

let's remove object 1 of these containers via 1 if methods:

std::vector<foo*>::iterator itr =    std::find( foovec.begin(), foovec.end(), ptoobj ); foovec.erase( itr ); 

cppreference says calls object's destructor. mean pointer object in foolist dangling pointer?

i'd prefer not use reference counted pointers. how can problem handled?

no.

when remove pointer container, you've done take pointer value container, nothing deleted. (i.e.: pointers have no destructor.)

however, it's dangerous have pointers of things in containers. consider:

std::vector<int*> v; v.push_back(new int()); v.push_back(new int()); v.push_back(new int()); 

if never go through container , delete each one, you've leaked. worse it's not exception safe. should use pointer container, delete things points when erased. (and erased when container destructs.)

in case, though, since sharing pointer in different places, can't see argument against shared_ptr; that's made for.


Comments

Popular posts from this blog

c++ - How do I get a multi line tooltip in MFC -

asp.net - In javascript how to find the height and width -

c# - DataTable to EnumerableRowCollection -