关于Visual C++.Net托管程序的一系列问题?
1.Visual C++.Net执行托管程序代码,实现了由CLR来动态管理内存,其中比如用String ^p = gcnew String("Test");中是不是p其实也是指针,^号只是用于区别标准C++的*,那么p是存在栈中,指向存在于堆中的“Test”,总结一句话^与*的区别仅仅在于一个用于CLR的托管,一个要自己实现管理内存,这样理解对吗?
2.还有在对值类型对象进行装箱时,会在托管堆中建立一个新对象,并将值类型的值复制到新对象中。
那么我想问,那么原始对象是不是就被删除了?
Exp:
int i = 123;
Object ^0 = i;
是不是在托管的堆中开辟一块空间与i一样,把i的值都复制过去,接着让o指向这块空间。但是原来的i所在空间删除了么?,如果删除了,那我要是在用i变量岂不是会出错,如果没删除,那么岂不是会有歧义,用指针修改指向的空间但是i的值还是不变??。还有如果o相当于指针,那么如何像标准C++中通过*来修改其指向的值。
Help me。。。。
[解决办法]
ArrayList.Add(1);
1.ToString();
1.GetHashCode();
...