Передайте аргумент по ссылке в С++/CLI, поэтому повторное присвоение влияет на вызывающего

Вероятно, это не сложный вопрос, но я всегда немного смущен тем, как рассматривать тип String как аргумент в Visual С++. У меня есть следующие функции:

void function_1(String ^str_1)
{
  str_1 = gcnew String("Test");
}

void function_2()
{
  String ^str_2 = nullptr;
  function_1(str_2);
}

После вызова function_1, str_2 по-прежнему равен null, но я хочу, чтобы str_2 был равен Test. Итак, как я могу достичь того, что содержимое str_1 передается на function_2?

Спасибо за любой совет.

Ответ 1

Используйте ссылку отслеживание:

void function_1(String ^%str_1)
{
  str_1 = gcnew String("Test");
}

Объяснение: Передача String ^ - это как передача указателя. Изменения вносятся только в локальную копию справки. String ^% походит на передачу ссылки на ссылку... так же, как вы передадите указатель на указатель при вызове функции, которая должна изменить исходный указатель.