以 C++ 指標語意對照 ref 行為:
void TestRef(MyClassPtr* m) { (*m)->Value = 10; }
void TestNoRef(MyClassPtr m) { m->Value = 20; }
void TestCreateRef(MyClassPtr* m) { delete *m; *m = new MyClass(); (*m)->Value = 100; }
void TestCreateNoRef(MyClassPtr m) { m = new MyClass(); m->Value = 200; }
10 // TestRef 修改物件內容
20 // TestNoRef 修改物件內容
100 // TestCreateRef 重新指向新物件
100 // TestCreateNoRef 區域指標變更,不影響呼叫端
ref 讓方法可「重新指派」呼叫端的參考型別變數。ref 時,方法收到的是參考的「複本」,可修改物件內容,但無法換掉呼叫端的參考。struct(值型別),可自行測試驗證。