C++/CLI 允許直接在堆疊上宣告參考型別 (ref class) 變數:
Point p1, p2(3,4); // p1 由預設建構函數初始化,p2 由帶參數建構函數初始化
雖語法像值類別,但 Point 為 ref class,實際仍受 CLI 執行階段管理 (GC 可能移動、最終回收)。不能 宣告靜態/全域參考型別實例。不能 對其使用 sizeof (大小僅運行時確定),但可對控制碼 (Point^) 用 sizeof。不能 建立堆疊語意的 CLI 陣列。
原生 C++ 用 & 宣告別名 (參考);但參考型別實例在 GC 壓縮堆積時會移動,原生指標/參考無法追蹤。C++/CLI 提供 % (追蹤參考) 專門綁定參考型別變數:
Point^ p1 = gcnew Point(1,2);
Point^% p2 = p1; // p2 追蹤 p1 變數本身 (而非物件)
// 相當於 C#: ref Point p2 = p1; (但 C# 無此語法,只能用 ref/out 參數)
用途:
void Swap(Point^% a, Point^% b)。% 必須初始化,且終身綁定同一變數,語意類似原生 & 但支援 GC 移動。