Re: Dynamically allocated classes
Thomas Richter wrote:
[...]
C++ has no garbadge collector.
C++ has no standard garbage collector. Third party solutions
exist; in my experience, it is easier to install the Boehm
collector than it is to install Boost (in order to use
boost::shared_ptr).
A wrapper around the vector that is responsible for managing
the life-time of the objects might be suitable, i.e. a class
that creates objects by name (see below), puts them into the
vector, and whose destructor deletes all objects within the
vector.
That's also a solution. In addition, removing an object from
the collection should delete it.
This is, in fact, generally the preferred solution for entity
objects referred to from outside the program. Except that the
container is an std::map< ExternalIdType, Item* >, rather than
vector (unless, of course, the ExternalIdType is a dense set of
integers). In most real applications, this is true even when
garbage collection is used -- you want to call the destructor,
because it takes care of the various notifications that are
typically necessary when an entity object is destructed.
Can I dynamically create pointers with their names provided
by the user (e.g. the user types in "ruler" and this leads
to an execution like "item* ruler=new item").
C++ has no system like Java reflections that allows you to
create a class by its class name given as a string. However,
you can create something like this easily yourself. The
traditional way is to write a "factory class" that, given a
string, calls the constructor of the corresponding class by
checking a database of registered class constructors. A
std::map<> might be fine for doing this.
Just a nit, but you generally can't register constructors
directly, because you cannot take their address. You have to
introduce another level of indirection, registering either
pointers to functions, or to factory functional objects (all of
which derive from a common base, of course, since it is a
pointer to the base which you register).
--
James Kanze GABI Software
Conseils en informatique orient?e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S?mard, 78210 St.-Cyr-l'?cole, France, +33 (0)1 30 23 00 34
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]