• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Konstruktor kopiujący i przenoszący

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
990 wizyt
pytanie zadane 31 marca 2019 w C i C++ przez k222 Nałogowiec (30,150 p.)

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)?

komentarz 1 kwietnia 2019 przez criss Mędrzec (172,570 p.)
Ale gdzie byś chciał wrzucić to delete[]? Destruktor ofc by się przydał, ale poza tym nigdzie nie jest potrzebne zwalnianie pamięci

1 odpowiedź

+2 głosów
odpowiedź 31 marca 2019 przez mokrowski Mędrzec (158,660 p.)
wybrane 2 kwietnia 2019 przez k222
 
Najlepsza

Nie zauważyłeś kopiowania wskaźnika:

t{v.t}

.. w liście inicjalizacyjnej. Rzecz właśnie polega na tym że konstruktor przenoszący, dokonuje "taniego przeniesienia danych". W tym przypadku poprzez przejęcie wskaźnika.

PS. W przykładzie brakuje destruktora. To copy(....) także jest trochę na wyrost. Wystarczy przypisanie.

Podobne pytania

0 głosów
1 odpowiedź 464 wizyt
pytanie zadane 28 kwietnia 2018 w C i C++ przez konu33 Nowicjusz (210 p.)
–1 głos
1 odpowiedź 958 wizyt
0 głosów
2 odpowiedzi 756 wizyt

93,434 zapytań

142,429 odpowiedzi

322,662 komentarzy

62,798 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...