在VS2010中可能是因為.net是對C++又進(jìn)行了優(yōu)化。有些代碼不同了,現(xiàn)記錄于此,防止以后忘掉了。
StreamWriter^ sw = File::CreateText(path);
上面的^可能就是引用的意思,就是原來C++中的指針了。
sw->WriteLine( "Hello" );
其調(diào)用方式也是和指針的調(diào)用方法的方式是一樣的。
Thread^ t = gcnew Thread(gcnew ThreadStart(writeStringThread::ThreadProc));
上面一句代碼是VS 中創(chuàng)建線程的代碼,看著就很蛋疼,不僅是^ 還有一個gcnew 從字面意思理解的話可能就是編譯器自動對對象進(jìn)行了管理,gc就是垃圾回收嘛。
我在晚上搜索了gcnew說:
C++/CLI中使用gcnew關(guān)鍵字表示在托管堆上分配內(nèi)存,并且為了與以前的指針區(qū)分,用^來替換* ,就語義上來說他們的區(qū)別大致如下:
1. gcnew返回的是一個句柄(Handle),而new返回的是實際的內(nèi)存地址.
2. gcnew創(chuàng)建的對象由虛擬機(jī)托管,而new創(chuàng)建的對象必須自己來管理和釋放.
微軟官方解釋
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 創(chuàng)建了一個實例在GC堆上,導(dǎo)致的結(jié)果就是一個句柄類型已經(jīng)被創(chuàng)建。
好吧,微軟的東西唯一的好處就是每個東西基本上都給了例子的。像VC++ 這種東西是盡量有多復(fù)雜就搞多復(fù)雜。