Re: Dynamically allocated classes
Ulrich Eckhardt wrote:
Theo Richter wrote:
item* pencil = new item;
Two things here:
- Don't use new unless you have to, this is not Java.
This depends on the type of the object. My impression is that
Items are entity objects, not simply values. If that is the
case, they will normally be dyamically allocated.
- Don't use raw pointers but some smart pointer type.
That's pretty strange advice. About 80% of my pointers are raw
pointers. I only use smart pointers when I need some special
semantics, which isn't usually the case.
If you're not using garbage collection, then you'll probably
need smart pointers more frequently, but still not
systematically. In practice, for example, entity objects
(which, as mentionned above, should be most of your dynamically
allocated objects) should rarely be managed by smart pointers.
I would now like to add an interface that the user can add
new items during the program execution until he has finished
his job - so the number is not fixed.
My first idea: I could use a vector of items (vector<item>)
to hold the classes and just append using push_back. Are
there other/better ways? 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").
How about this:
std::map<std::string,item> items;
which provides an association between a string (the name) and an item.
I suspect that in the case of items in a stockroom, std::map<
std::string, Item* > would be more appropriate. (But of course,
he's not given us enough information to be sure.)
--
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! ]