在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創建的對象必須自己來管理和釋放.
微軟官方解釋
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堆上,導致的結果就是一個句柄類型已經被創建。
好吧,微軟的東西唯一的好處就是每個東西基本上都給了例子的。像VC++ 這種東西是盡量有多復雜就搞多復雜。