any benefit over (2)
Thanks for answering in advance:)
OK, let's rewrite this a tiny bit...
class MyData { ... }; // common to every case
(1)
class Example {
std::deque<MyData> storage; // an object
public:
void Enque(MyData const& d)
{ storage.push_back(d); } // storing a copy
};
(2)
class Example {
std::deque<MyData> *storage; // a pointer
public:
void Enque(MyData const& d)
{ storage->push_back(d); } // storing a copy
};
(3)
class Example {
std::deque<MyData*> *storage; // a pointer
public:
void Enque(MyData* pd)
{ storage->push_back(pd); } // storing a pointer
};
Every case has its use. (1) is common and easy to understand
and maintain. Extra copies are made of 'MyData', and it's not
use polymorphically. (2) Is not really different from (1),
except that the member 'storage' is dynamically allocated.
Makes no difference, really. Is harder to maintain than (1).
(3) Stores pointers to MyData. That's a totally different
container since it allows polymorphic use of the objects stored
in 'storage'. The fact that 'storage' is a pointer makes no
difference (and no sense either, like in case 2). If you intend
to store and to use 'MyData' polymorphically, it's better to
have a combination of (1) and (3):
class Example {
std::deque<MyData*> storage; // an object
public:
void Enque(MyData* pd)
{ storage.push_back(pd); } // storing a pointer
};
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Thanks a lot. Very helpful.