[转]VC++ ^和gcnew

本文转自:http://www.blogjava.net/yangtaochina/articles/371024.html

 

当VS2010蒙恐怕是因为.net是指向C++又开展了优化。有些代码不同了,现记录为这个,防止以后忘掉了。

StreamWriter^ sw = File::CreateText(path);

地方的^可能就是引用的意思,就是原C++中的指针了。

sw->WriteLine( “Hello” );

其二调用方式吗是和指针的调用方法的法子是平等的。

Thread^ t = gcnew Thread(gcnew
ThreadStart(writeStringThread::ThreadProc));

点一样句代码是VS 中创造线程的代码,看正在就十分蛋疼,不仅是^ 还有一个gcnew
从字面意思理解的语也许就是是编译器自动对目标开展了管理,gc就是垃圾回收嘛。

本身以夜间寻觅了gcnew说:

C++/CLI中采用gcnew关键字表示于托管堆上分配内存,并且为跟原先的指针区分,用^来替换*
,就语义上来说他们之界别大致如下:

  1.     gcnew返回的是一个句柄(Handle),而new返回的凡实在的内存地址. 

  2.    
gcnew创建的目标由虚拟机托管,而new创建的靶子要协调来保管以及释放.

微软C++官方说明

gcnew creates an instance of a managed type (reference or value type) on
the garbage collected heap. The result of the evaluation of a gcnew
expression is a handle (^) to the type being created.

说gcnew 创建了一个实例在GC堆上,导致的结果就是一个句柄类型已经给创造。