以下代碼:爲什麼不能將跟蹤引用用作類成員?
ref class A
{
private:
int% referenceToAnInt;
};
產生在Visual Studio以下錯誤:
錯誤C3160: '詮釋%':一個管理類的數據成員不能有這種類型
我想跟蹤引用是一個託管的東西 - 爲什麼他們不能成爲託管類的成員? 另請參見:如何正確地在C++/CLI中存儲對值類型的引用?
以下代碼:爲什麼不能將跟蹤引用用作類成員?
ref class A
{
private:
int% referenceToAnInt;
};
產生在Visual Studio以下錯誤:
錯誤C3160: '詮釋%':一個管理類的數據成員不能有這種類型
我想跟蹤引用是一個託管的東西 - 爲什麼他們不能成爲託管類的成員? 另請參見:如何正確地在C++/CLI中存儲對值類型的引用?
CLR不允許將跟蹤引用存儲爲字段。另外,來自C++/CLI-Spec:
包含跟蹤參考的程序具有除自動以外的存儲持續時間 是不合格的。 (這就排除有跟蹤 引用作爲數據成員)。
我猜他們想避免,你保持一個參考長於引用對象的實際壽命的問題。另一種方法是使用wrapper ref類來保存值,或者委託讀取/寫入。
跟蹤參考是「託管的東西」,這就是爲什麼你不能使用它們作爲類的成員。它們與C++ &
引用類似,您可以使用它們在某些其他方法中引用局部變量。但是局部變量存儲在短期存儲器(又名堆棧)中。這意味着當包含該局部變量的方法結束時,引用將不再有效,但該對象可能仍然存在。
這不會是內存安全的,這就是爲什麼在.Net中禁止這樣做的原因。
除非使用'/ clr:safe'開關來產生可驗證的輸出,否則C++/CLI不會強制執行安全性。 –
C++/CLI沒有,但在這種情況下CLR。 – svick
請嘗試一次提出一個問題。如果您有兩個不同的問題,請在兩個帖子中提問。 – svick