interior_ptr (C++/CLI)
「內部指標」會宣告指向參考型別內部的指標,而不是指向物件本身。 內部指標可以指向參考控制代碼、實值類型、Boxed 類型控制代碼、Managed 類型的成員,或是指向 Managed 陣列的元素。
所有執行階段
(這個語言功能沒有適用所有執行階段的備註。)
Windows 執行階段
(這個語言功能沒有只適用於 Windows 執行階段的備註。)
需求
編譯器選項:/ZW
通用語言執行平台
下列語法範例將示範內部指標。
語法
cli::interior_ptr<cv_qualifier type> var = &initializer;
參數
cv_qualifier
const
或 volatile
限定符。
type
initializer 的型別。
var
interior_ptr 變數的名稱。
初始設定式
參考類型的成員,Managed 陣列的元素,或是其他任何可以指派至原生指標的物件。
備註
原生指標無法追蹤項目,因為它的位置會在 Managed 堆積上變更,這是記憶體回收行程移動物件的執行個體所造成。 為了讓指標正確參考執行個體,執行階段必須更新指標以指向新放置的物件。
interior_ptr 代表原生指標功能的超集。 因此,任何可指派給原生指標的項目也都能指派給 interior_ptr。 內部指標可以執行與原生指標相同的一組作業,包括比較和指標算術。
內部指標只能在堆疊上宣告。 內部指標不可以宣告為類別的成員。
由於內部指標只會出現在堆疊上,因此採用內部指標的位址會產生 Unmanaged 指標。
interior_ptr具有隱含的轉換,bool
其允許在條件語句中使用。
如需如何宣告內部指標,讓它指向無法在記憶體回收堆積上移動之物件的相關資訊,請參閱 pin_ptr。
interior_ptr 位於 cli 命名空間。 如需詳細資訊,請參閱平台、預設與 cli 命名空間。
如需內部指標的詳細資訊,請參閱
需求
編譯器選項:/clr
範例
下列範例將示範如何宣告內部指標並應用到參考類型中。
// interior_ptr.cpp
// compile with: /clr
using namespace System;
ref class MyClass {
public:
int data;
};
int main() {
MyClass ^ h_MyClass = gcnew MyClass;
h_MyClass->data = 1;
Console::WriteLine(h_MyClass->data);
interior_ptr<int> p = &(h_MyClass->data);
*p = 2;
Console::WriteLine(h_MyClass->data);
// alternatively
interior_ptr<MyClass ^> p2 = &h_MyClass;
(*p2)->data = 3;
Console::WriteLine((*p2)->data);
}
1
2
3