How is the destructor for the vector managed when adding elements to this list? Is the object destroyed correctly when it goes out of scope? Are there cases where it would not delete the object correctly? For example what are the consequences if “table” was a child of object, and we added a new table to a vector of object pointers?
vector <object*> _objectList;
_objectList.PushBack(new object);
Since you’re making a vector of “bare” pointers, C++ can’t possibly know that the pointers in question are meant to have “ownership” of the objects they point to, and so it will not call those objects’ destructors when the pointer goes away. You should use a simple “smart” pointer instead of a “bare” pointer as the
vector‘s item. For example, Boost’s shared_ptr would be perfectly adequate for the task (although you can surely do it with “cheaper”, lighter-weight approaches, if you don’t want to deal with Boost as a whole and have no other need for smart pointers in your code).Edit: since you (the OP) say that using a framework such as Boost is not feasible, and a couple comments usefully point out that even wrapping
std::auto_ptrdoesn’t really qualify as a decent shortcut, you may have to implement your own smart pointers (or, if you find an open-source, stand-alone smart pointer template class that looks usable, audit it for compliance with your requirements). This article is a useful primer to smart pointers in C++, whether you have to roll your own or audit an existing implementation.