分享方式:


interior_ptr (C++/CLI)

「內部指標」會宣告指向參考型別內部的指標,而不是指向物件本身。 內部指標可以指向參考控制代碼、實值類型、Boxed 類型控制代碼、Managed 類型的成員,或是指向 Managed 陣列的元素。

所有執行階段

(這個語言功能沒有適用所有執行階段的備註。)

Windows 執行階段

(這個語言功能沒有只適用於 Windows 執行階段的備註。)

需求

編譯器選項:/ZW

通用語言執行平台

下列語法範例將示範內部指標。

語法

cli::interior_ptr<cv_qualifier type> var = &initializer;

參數

cv_qualifier
constvolatile 限定符。

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

另請參閱

適用於.NET 和 UWP 的元件延伸模組