2014-12-11 11 views
8

Znalazłem poniższy kod w „języku C++ programowanie, 4th Edition”, rozdział 17.5.1.3C++ uwikłany wspólny wskaźnik

struct S2 { 
    shared_ptr<int> p; 
}; 

S2 x {new int{0}}; 

void f() 
{ 
    S2 y {x};    // ‘‘copy’’ x 
    ∗y.p = 1;    // change y, affects x 
    ∗x.p = 2;    // change x; affects y 
    y.p.reset(new int{3}); // change y; affects x 
    ∗x.p = 4;    // change x; affects y 
} 

Nie rozumiem ostatni komentarz, rzeczywiście YP powinien wskazywać na nowy adres pamięci po wywołaniu resetu(), a więc musi pozwolić yp bez zmian, prawda?

Dzięki

+2

dzyń wydaje się zgadzam [mówi YP jest na koniec 3] (http://coliru.stacked-crooked.com/a/c687c657a22cb323) – Borgleader

+0

Jest duża książka nie jest błędne przykłady, zobacz moje ostatnie [pytanie tutaj na inny przykład] (http://stackoverflow.com/q/27158812/1708801), jak Bjarne mówi [tutaj] (http: //www.stroustrup. com/4th.html) * Zapraszam do wysłania sugerowanej erraty. Naprawię każdy błąd, który można naprawić w ramach ograniczeń książki *. Jak się z nim skontaktować można znaleźć na [strona główna] (http://www.stroustrup.com/). –

Odpowiedz

5

Książka jest nieprawidłowa i masz rację. Możesz rozważyć wysłanie tego do Bjarne, aby można było to naprawić w następnym wydruku.

Prawidłowe komentarze mogą być:

S2 y {x};    // x.p and y.p point to the same int. 
*y.p = 1;    // changes the value of both *x.p and *y.p 
*x.p = 2;    // changes the value of both *x.p and *y.p 
y.p.reset(new int{3}); // x.p and y.p point to different ints. 
*x.p = 4;    // changes the value of only *x.p