Позвольте мне задать свой вопрос на примере.
#include <memory>
std::unique_ptr<int> get_it() {
auto p = new int;
return p;
}
int main() {
auto up ( get_it() );
return 0;
}
Не удается выполнить компиляцию со следующей ошибкой:
a.cpp:5:9: error: could not convert ‘p’ from ‘int*’ to ‘std::unique_ptr<int>’
return p;
^
Почему здесь нет автоматического преобразования с необработанного указателя на уникальный? И что я должен делать вместо этого?
Мотивация: я понимаю, что хорошая практика - использовать интеллектуальные указатели для владения, чтобы быть ясными; Я получаю указатель (который у меня есть) где-то, как int*
в этом случае, и я (думаю, я) хочу его в unique_ptr
.
Если вы планируете комментировать или добавлять свой собственный ответ, пожалуйста, обращайтесь в аргументы Герберта Саттера, чтобы это было возможно в предложении N4029.