Передайте аргумент по ссылке в C ++ / CLI, чтобы переназначение влияло на вызывающего - PullRequest
12 голосов
/ 17 июня 2010

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

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 Ответ

27 голосов
/ 17 июня 2010

Использовать номер для отслеживания :

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

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

...