On Wed, 2019-12-04 at 09:29 -0700, Martin Sebor wrote: > On 11/15/19 6:22 PM, David Malcolm wrote: > > This patch adds a class auto_delete_vec<T>, a subclass of auto_vec > > <T *> > > that deletes all of its elements on destruction; it's used in many > > places later in the kit. > > > > This is a crude way for a vec to "own" the objects it points to > > and clean up automatically (essentially a workaround for not being > > able > > to use unique_ptr, due to C++98). > > > > gcc/ChangeLog: > > * vec.c (class selftest::count_dtor): New class. > > (selftest::test_auto_delete_vec): New test. > > (selftest::vec_c_tests): Call it. > > * vec.h (class auto_delete_vec): New class template. > > (auto_delete_vec<T>::~auto_delete_vec): New dtor. > > Because of slicing, unless preventing the elements from being > deleted in the class dtor is meant to be a feature, it seems that > using a wrapper class rather than public derivation from auto_vec > might be a safer solution. > > It might be worth mentioning in a comment that the class isn't > safe to copy or assign (each copy would wind up delete the same > pointers), in addition to making its copy ctor and copy assignment > operator inaccessible or deleted. > > Martin
In the version of the patch in the v4 kit: https://gcc.gnu.org/ml/gcc-patches/2019-12/msg01035.html I added: private: DISABLE_COPY_AND_ASSIGN(auto_delete_vec<T>); to the class. Does that satisfy your concerns about slicing? (and, indeed, about copying and assigning) Thanks Dave