Here's a slightly more complete test based on Chris Mansley's code, because I wanted to see the effect on values, ptrs and refs - and I wanted to see the difference between wiping and wiping. No difference. As a result, the destructor is called only for the types of values ββthat you expect. I just like to test my understanding 8)
#include <iostream>
Output:
clear_test_value() { A(A1 data) @0x7ffee07389a0 Copy A(A1 data) @0x7ffee0738960 Copy A(A1 data) @0x7fe98fc029c8 Destruct ~A(A1 data) @0x7ffee0738960 Destruct ~A(A1 data) @0x7fe98fc029c8 } Destruct ~A(A1 data) @0x7ffee07389a0 erase_test_value() { A(A1 data) @0x7ffee07387f0 Copy A(A1 data) @0x7ffee07387b0 Copy A(A1 data) @0x7fe98fc029c8 Destruct ~A(A1 data) @0x7ffee07387b0 Destruct ~A(A1 data) @0x7fe98fc029c8 } Destruct ~A(A1 data) @0x7ffee07387f0 clear_test_ptr() { A(A1 data) @0x7ffee07389b0 } Destruct ~A(A1 data) @0x7ffee07389b0 erase_test() { A(A1 data) @0x7ffee0738800 } Destruct ~A(A1 data) @0x7ffee0738800 clear_test_ref() { A(A1 data) @0x7ffee07389b0 } Destruct ~A(A1 data) @0x7ffee07389b0 erase_test_ref() { A(A1 data) @0x7ffee0738800 } Destruct ~A(A1 data) @0x7ffee0738800
source share