Re: iterating over fields
On Nov 15, 7:10 pm, Andrea Crotti <andrea.crott...@gmail.com> wrote:
Supposing I have a class with many objects which are also of class
Serializable.
I've been wondering for a long time how I can iterate over them, and
maybe I found a solution:
auto_ptr<Serializable> fields[NUM_FIELDS];
and then during initialization do
fields[0] = auto_ptr<Serializable>(¤tLocation);
fields[1] = auto_ptr<Serializable>(&address);
It's very suspicious to take the address of something in the
constructor of an auto_ptr. It can be legal, if e.g. you have:
Serializable& currentLocation = *new Serializable;
But that's a very unusual idiom.
and supposing they all have the method "check" I could do
for (int i = 0; i < NUM_FIELDS; ++i)
if (! (fields[i]->check()))
return false;
return true;
for example, which looks quite nice.
Does it make sense?
I don't know. First, I'd like to know why
std::vector<Serializable> doesn't work. Or if polymorphism is
required, std::vector<std::shared_ptr<Serializable> >, or better
yet, a wrapper vector_ptr which takes care of the memory
management and the extra layer of indirection.
Maybe I should give completely to auto_ptr the control?
In what way?
And also I tried first with a vector but it doesn't work,
Why not?
I read on the internet something but I really didn't get why
vector<auto_ptr<Serializable> > is not digested by C++...
You cannot have a vector of auto_ptr, because auto_ptr isnt
CopyConstructable, in the sense required by vector. Other smart
pointers are, or if you really want a vector of polymorphic
objects owned by the vector, say boost::ptr_vector (a much
better solution).
--
James Kanze