我竭力要弄清楚这种类型的代码CLI对象:传递在修改它们的功能
void changeString (String^% str)
{
str = "New String";
}
为什么我需要跟踪引用传递给句柄对象?这太刺激了。 为什么手柄不够,句柄是类似于C++指针,那么为什么不......
感谢
我竭力要弄清楚这种类型的代码CLI对象:传递在修改它们的功能
void changeString (String^% str)
{
str = "New String";
}
为什么我需要跟踪引用传递给句柄对象?这太刺激了。 为什么手柄不够,句柄是类似于C++指针,那么为什么不......
感谢
我相信这是精神从本C无异++代码:
void reset_foo(Foo * & p)
{
p = new Foo; // leeks, neeps and tatties
}
用法:
Foo * p;
reset_foo(p);
反过来,这仅仅是传递引用的一般概念的一个特例:
void set_int(int & n) { n = 10; }
int a;
set_int(a);
assert(a == 10);
是的,我明白了这一点。所以在那种情况下,我在拼图中想念的主要问题是理解String是不可变的参考类型,正如Joe Gauterin所说。那么问题是,所有的CLI类型都是不可变的引用类型吗?如果我想在功能中改变它们,我是否必须以这种方式通过它们? – user2381422
@ user2381422:“不变的参考”是什么意思?你的意思是这个对象是不可改变的?您可以编写自己的CLI类,并且它们不必是不可变的。也许'字符串“是,但这是一个设计选择。 –
那么如何将对象传递给函数,其中的对象将在函数内被修改?我仍然必须将它们作为MyClass ^%传递,这是对句柄的跟踪引用? – user2381422
'String'是一个不可变的引用类型 - 它不能被修改。您需要修改引用它的引用。所以你需要一个跟踪参考。 –
这是仅用于String的情况,还是我将不得不为所有类型的对象执行此操作,如果我想在函数中修改它们? – user2381422
抱怨有点愚蠢,引用是一个基本的编程概念。您可以改用StringBuilder。使这个特定的片段清理器非常明显的方法是*返回新的字符串。 –