Cześć, mam taki kod, dotyczący konstruktora kopiującego i przenoszącego:
class vec {
int length;
int* t;
public:
vec(int n, int val) : length{n}, t{ new int[length] } {
for(int i = 0; i < length; ++i) t[i] = val;
}
vec(const vec& v) : length{v.length}, t{ new int[length] } { // copy ctor
cout << "copy ctor" << endl;
copy(v.t, v.t+length, t); // stl std::copy
}
vec(vec&& v) : length{v.length}, t{v.t} { // move ctor
cout << "move ctor" << endl;
v.length = 0;
v.t = nullptr;
}
}
i jest on pokazany jako przykład tego, jak to powinno wyglądać. Mam jednak pytanie, czy nie musimy / powinniśmy gdzieś tam włożyć czyszczenia pamięci? Ponieważ mamy tam po prostu alokacje za pomocą listy inicjalizującej i czyszczenie jako = nullptr, co jest fajne, czytelne, ale czy jest to poprawna praktyka (czy nie powinno być delete[] v.t i potem cała reszta)?