Позвольте мне задать свой вопрос на примере.Почему при возвращении он не может быть автоматически преобразован в unique_ptr?
#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
.
Если вы рассматриваете комментирования или добавления свой собственный ответ, пожалуйста, обращайтесь Herbert Sutter's arguments for this to be possible in proposal N4029.
Потому что тогда такие вещи, как 'int x; return & x; 'будет компилироваться. –
@KerrekSB: Я также могу выполнить 'int * p = nullptr; * p = 123; 'и это будет компилироваться. Во всяком случае, чтобы не быть слишком спорным, я спрошу - что мне делать? – einpoklum
Вы делаете один из указателя, например. 'std :: unique_ptr (p)'. –