Как передать ссылку unique_ptr.get () в функцию - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть следующий код, однако он сообщает error: invalid initialization of non-const reference of type 'char*&' from an rvalue of type 'std::unique_ptr<char []>::pointer {aka char*}'.Мне интересно, могу ли я буферизовать выделение в функции для unique_ptr таким образом.

#include <iostream>
#include <string>
#include <memory>

void buffer_test(char* &buffer){

    buffer = new char[100];
}

int main()
{



    std::unique_ptr<char []> buffer{};

    buffer_test(buffer.get());

    std::cout << buffer[0] << std::endl;

    std::cout << "finish";
}

1 Ответ

4 голосов
/ 20 сентября 2019

unique_ptr::get не возвращает ссылку на объект указателя в объекте unique_ptr.Возвращает значение указателя.Вы получаете его копию, а не ссылку.

Таким образом, вы не можете передать это значение в функцию с неконстантной ссылкой на указатель.Если вы хотите заполнить фактическое сохраненное значение указателя unique_ptr, вам придется * передать unique_ptr самому buffer_test или просто buffer_test вернуть указатель, который он выделил.

Или, что еще лучше, вернуть unique_ptr в буфер, который он выделяет.Потому что в принципе нет причин не делать этого.

...