Интересно, почему `std :: unique_ptr <int>foo (new int) 'является законным, поскольку` std :: unique_ptr <int>`требует, чтобы тип входного аргумента был` int`? - PullRequest
0 голосов
/ 26 мая 2020

Интересно, почему std::unique_ptr<int> foo (new int) допустимо.

Меня смутило то, что я думаю, что тип входного аргумента должен быть int в std::unique_ptr<int>, а тип new int - int*.

Я новичок в C ++. Я думал об этом снова и снова, но все еще не мог понять. Может ли кто-нибудь объяснить мне это? Спасибо за помощь.

1 Ответ

7 голосов
/ 26 мая 2020

На самом деле std::unique_ptr имеет несколько перегрузок конструктора одна из которых

explicit unique_ptr( pointer p ) noexcept;

Создает std::unique_ptr, которому принадлежит p, инициализируя сохраненный указатель с помощью p и инициализация сохраненного удалителя. Требуется, чтобы Deleter был DefaultConstructible и эта конструкция не генерировала исключения.

Не имеет смысла принимать значение std::unique_ptr, поскольку цель этого класса - буквально управлять указателем. Вместо этого имеет смысл принять значение std::make_unique, которое создаст новый объект, используя это значение.

...