Re: Deleting Vectors that Point to the Same Objects
On Jan 4, 10:32 pm, Rune Allnor <all...@tele.ntnu.no> wrote:
On 5 Jan, 06:55, Mike <westplas...@gmail.com> wrote:
Hello, I hope everybody had a good New Year.
I have a class that looks like the following:
class Foo {
public:
Foo();
~Foo() {} // Destructor is defined.
...
private:
std::vector<Bar*> _list1;
std::vector<Bar*> _list2;
...
};
As my program runs, _list1 and _list2 are populated as follows:
Bar* bar = new Bar();
_list1.push_back(bar);
_list2.push_back(bar);
In general, _list2 is a subset of _list1, so it isn't redundant.
My question is, what do I need to put in the destructor of Foo to
correctly delete these vectors?
I'd have used boost::shared_pointer for these things.
The object is left alone if a pointer is deleted while
remaining pointers still refer to it, and destroyed only
when the last pointer to it is deleted.
I'd agree with Rune that you should use a shared_pointer, but if you
insist on naked pointers, since list2 is a subset of list 1, just
do the following in the destructor:
for (std::vector<Bar*>::iterator it = _list1.begin();
it != _list1.end();
++it)
delete *it;
The destructor will then automatically destroy the vectors.