Why one would want to explicitly clear the a vector member variable (of on in a dtor (please see the code below). what are the benefits of clearing the vector, even though i
In class A
, there is absolutely no reason to .clear()
the vector
-type member variable in the destructor. The vector
destructor will .clear()
the vector
when it is called.
In class B
, the cleanup code can simply be written as:
delete p_;
There is no need to test whether p_ != NULL
first because delete NULL;
is defined to be a no-op. There is also no need to set p_ = NULL
after you've delete
d it because p_
can no longer be legitimately accessed after the object of which it is a member is destroyed.
That said, you should rarely need to use delete
in C++ code. You should prefer to use Scope-Bound Resource Management (SBRM, also called Resource Acquisition Is Initialization) to manage resource lifetimes automatically.
In this case, you could use a smart pointer. boost::scoped_ptr
and std::unique_ptr
(from C++0x) are both good choices. Neither of them should have any overhead compared to using a raw pointer. In addition, they both suppress generation of the implicitly declared copy constructor and copy assignment operator, which is usually what you want when you have a member variable that is a pointer to a dynamically allocated object.