Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Zamiana wskaźników użytych do alokacji pamięci

Ostatnio zmodyfikowano 2016-03-13 12:32
Autor Wiadomość
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:

C/C++
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?
P-145963
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.
P-145965
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. :/
P-145966
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ę.
P-145968
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!
P-145970
« 1 »
  Strona 1 z 1