Назначение shared_ptr в C ++ 11 - PullRequest
       14

Назначение shared_ptr в C ++ 11

1 голос
/ 09 декабря 2011

У меня есть следующий код:

    #include <memory>

    int main(void)
    {
        std::shared_ptr<int> currInt(nullptr);

        std::shared_ptr<int> newInt(new int);
        currInt = newInt;

        return 0;
    }

Оказывается, что это недопустимый C ++ 11 (он используется в черновой версии) и что конструктор присваивания теперь использует семантику перемещения,Что-то, чего я не понимаю.

Может кто-нибудь объяснить, как я могу изменить приведенный выше код, чтобы он работал ...

1 Ответ

5 голосов
/ 09 декабря 2011

Существует конструктор копирования для shared_ptr, иначе какой смысл в shared_ptr?

Левая ссылка от OP говорит, что если определен только оператор присваивания перемещения, то конструктор копирования будет неявно удален, заставит shared_ptr работать неправильно . Это можно увидеть и в Boost changeset , где операторы копирования явно добавлены для исправления ошибки.

Операторы присваивания копии shared_ptr можно найти в §20.7.2.2.3 [util.smartptr.shared.assign] /1–3.

.
shared_ptr& operator=(const shared_ptr& r) noexcept;
template<class Y> shared_ptr& operator=(const shared_ptr<Y>& r) noexcept;
template<class Y> shared_ptr& operator=(auto_ptr<Y>&& r);
...