[C++] Zamiana wskaźników użytych do alokacji pamięci
Ostatnio zmodyfikowano 2016-03-13 12:32
Yoozek Temat założony przez niniejszego użytkownika |
[C++] Zamiana wskaźników użytych do alokacji pamięci » 2016-03-13 11:36:10 Witam! Zastanawiam się, w jaki sposób mogę zamienić dwie zmienne wskaźnikowe, które zostały użyte do alokacji pamięci. Oto fragment kodu: class VektorND { protected: double * _liczby; int _wymiar; public: VektorND() { } VektorND( const double liczby[], int wymiar ) { _wymiar = wymiar; _liczby = new double[ _wymiar ]; for( int i = 0; i < _wymiar; i++ ) { _liczby[ i ] = liczby[ i ]; } cout << "Konstruktor bazowej" << endl; } VektorND( const VektorND & oryginal ) { _wymiar = oryginal._wymiar; _liczby = new double[ _wymiar ]; for( int i = 0; i < _wymiar; i++ ) { _liczby[ i ] = oryginal._liczby[ i ]; } } VektorND & operator =( VektorND & right ) { VektorND temp( right ); swap( _wymiar, temp._wymiar ); swap( _liczby, temp._liczby ); return * this; }
Nie wiem, w jaki sposób mogę użyć funkcji swap do zamiany wskaźników w obiektach klasy VektorND, by operator "=" zamieniał dwa obiekty (przy użyciu idiomu copy-swap). Chodzi o tę linijkę: swap( _liczby, temp._liczby ); Jak powinna ona wyglądać, by wszystko działało prawidłowo? |
|
Monika90 |
» 2016-03-13 11:43:51 operator = i konstruktor kopiujący wyglądają OK (operatorowi = brakuje tylko const w parametrze), ale konstruktor domyślny jest błędny i nie ma destruktora. |
|
Yoozek Temat założony przez niniejszego użytkownika |
» 2016-03-13 11:49:45 Destruktor i inne elementy są, tylko nie dołączyłem ich do wiadomości, żeby niepotrzebnie nie zaśmiecać wiadomości. Operator = nie ma const, ponieważ chcę zamienić elementy po lewej i prawej stronie operatora, nie przypisywać lewej części wartości z prawej. Jednak linijka, o której wspomniałem w pierwszym poście wcale nie zamienia zmiennych odpowiedzialnych za alokację pamięci, w tym jest mój problem. :/ |
|
Monika90 |
» 2016-03-13 12:10:41 Operator = nie powinien modyfikować prawej strony, nie o to chodzi w copy-and-swap by modyfikować prawą stronę. |
|
Yoozek Temat założony przez niniejszego użytkownika |
» 2016-03-13 12:32:53 Rzeczywiście, cały czas wychodziłem z błędnego założenia, że obydwie strony mam zamienić, a chodzi tutaj jedynie o zamianę lewej części równości z tymczasowym obiektem. W takim razie wszystko działa tak jak powinno, muszę tylko rzeczywiście dodać const do argumentu funkcji operatora. Dziękuję za pomoc! |
|
« 1 » |