Prawdopodobnie nie jest to trudne pytanie, ale zawsze jestem trochę zdezorientowany, jak traktować typ String jako argument w Visual C++. Mam następujący do funkcji:Przekaż argument przez odwołanie w C++/CLI, aby ponowne przypisanie wpłynęło na wywołującego.
void function_1(String ^str_1)
{
str_1 = gcnew String("Test");
}
void function_2()
{
String ^str_2 = nullptr;
function_1(str_2);
}
Po wywołaniu function_1
, str_2
jest nadal równa null
, ale to, co chcę osiągnąć to, że str_2
jest równa Test
. Jak więc osiągnąć, że treść str_1
została przekazana do function_2
?
Dzięki za radę.
Dzięki! Nauczyłem się czegoś dzisiaj! – stefangachter
@Agnel Nie rozumiem, dlaczego powiedziałeś, że po przejściu wskaźnika zmieniają się jedynie lokalne kopie odniesienia. Przede wszystkim wskaźnik nie jest odniesieniem. Po drugie, jeśli przekażesz wskaźnik w języku C++ i zmodyfikujesz dane, do których on wskazuje, nie modyfikujesz lokalnej kopii danych. Czy pomieszałem semantykę, czy co? – Ian
@Ian, Co miałem na myśli to, że jeśli przekazać wskaźnik i zmienić wartość samej zmiennej wskaźnika (w przeciwieństwie do wartości danych wskazuje), zmieni się tylko wartość lokalnej zmiennej wskaźnikowej. I tak, jeśli zmodyfikujesz dane, na które wskazuje wskaźnik, same dane są modyfikowane, a nie lokalna kopia. Nie istnieje lokalna kopia danych; lokalna kopia wskaźnika istnieje. –