Я полагаю, что в книге Страуступа, третье издание, страница 368, есть опечатка. Может кто-нибудь подтвердить? - PullRequest
2 голосов
/ 22 января 2012

Я полагаю, что в этом фрагменте кода, извлеченном из книги Страуступа, на ее странице 368 есть опечатка:

template <class X> class std::auto_ptr
{
    template <class Y> struct auto_ptr_ref { /* ... */ }; // helper class
    X * ptr;
    public :
    typedef X element_type;
    explicit auto_ptr(X* p =0) throw() { ptr = 0; }
    auto_ptr (auto_ptr& a) throw() { ptr = a.ptr; a.ptr = 0; } // note: not const auto_ptr&

    /* ... */
};

В случае, если не

explicit auto_ptr(X* p =0) throw() { ptr = 0; }

быть

explicit auto_ptr(X* p =0) throw() { ptr = p; }

вместо?

Ответы [ 2 ]

3 голосов
/ 22 января 2012

Ошибка для книги вносит некоторые изменения :

Глава 14:

pg 367-368 Недавнее изменение стандартов изменило определение auto_ptr. Пожалуйста, замените последний абзац на стр. 367 и стр. 368 ...

0 голосов
/ 22 января 2012

Я посмотрел в этой книге, однако у меня есть более новая версия, в которой есть несколько дополнительных страниц.

Во всяком случае, этот код выглядит правильно, потому что он говорит, что p = 0 и что ptr = p - то же самоевещь с ptr = 0.

...