Re: Dynamically allocated classes
Theo Richter wrote:
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.
OK, sounds like a reasonable use of heap space.
My first idea: I could use a vector of items (vector<item>) to hold
the
classes and just append using push_back.
That's probably the best thing to do.
Are there other/better ways?
There are many other ways. Whether they are better depends on your
goals. I usually allocate using new, and store pointers to the
dynamically allocated objects in a vector. E.g:
Item* item = 0;
try {
items.push_back(item = new Item);
} catch(...) {
delete item;
throw;
}
return item;
When the phase of the program needing these items has ended, a
destructor can iterator over the container and delete each pointer.
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").
Not exactly, but it's OK, because there wouldn't be much point in doing
that. It's a powerful technique in languages with heavyweight runtime
environments, but in C++, identifiers are only meant to identify
variables to the programmer and the compiler, neither of which are
generally expected to be present at runtime.
If you want a way to access objects by name at runtime, but you don't
know yet exactly what the names or objects will be, your best bet is
probably a standard map:
std::map<std::string, Item*> item_map;
std::string name = "hello" /* or maybe get_name_from_user() */;
item_map[name] = new Item;
Thanks for your help
Welcome to C++. Good luck.
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]