Я пишу функцию для загрузки текста из файла кода шейдера. Я наткнулся на что-то странное в отношении указателей, и я не могу понять, почему.Почему в C++ мне нужно передать указатель ссылкой, чтобы изменить выделенный контент?
У меня есть функция с именем Load. В этой функции я копирую текст, взятый из потока файлов, в переменную .
static void Load(const GLchar* source_path, GLchar* output,GLint& count)
{
string code;
// loading logic here
code= vShaderStream.str(); // copying the string from the stream
count = code.length();
output = new GLchar[count];
std::size_t length = code.copy(output, count, 0);
output[length]= '\0';
}
нагрузки называется таким образом:
for (size_t i = 0; i < d_n_fragment; i++)
{
Load(d_fragment_source_path, d_fragment_code[i], d_fragment_string_count[i]);
}
где d_fragment_code является двойной указатель Glchar **, который уже инициализирован. После того, как функция загрузки называется указателем d_fragment_code [i] не содержит текста. Я попытался изменить подпись функции нагрузки на:
static void Load(const GLchar* source_path, GLchar*& output,GLint& count)
и, таким образом, передать указатель по ссылке. Он работает после того, как функция называется . D_fragment_code правильно сохраняет текст, загруженный из файла, но я не понимаю, почему указатель должен быть передан по ссылке.
Я думал, что передать указатель достаточно, чтобы изменить его содержимое. Я смущен, не могли бы вы пролить свет на него?
Вы не только изменить содержание, изменить указатель здесь: 'выход = новый GLchar [число];' –