Re: two types of heap allocated objects--any benefit?
newbie wrote:
Let's see two different usage of an STL container. I see (2) more
often when reading code over (1), dose that give any benefit or it's
purely a coding preference?
Also, please see the (3), I see (3) often in ppl' code, does that give
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