2

我相信从 Stroustup 的书中提取的这段代码片段有一个错字,第 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; }

反而 ?

4

2 回答 2

3

本书的勘误表做了一些改动

第十四章:

第 367-368 页最近的标准更改修改了 auto_ptr 的定义。请替换第 367 页和第 368 页的最后一段...

于 2012-01-22T12:59:29.913 回答
-3

我看过那本书,但是我有一个更新的版本,它有一些额外的页面。

无论如何,该代码看起来是正确的,因为它说 p = 0 并且说 ptr = p 与 ptr = 0 相同。

于 2012-01-22T12:54:51.147 回答