编译器错误 C3160

“pointer”: 托管或 WinRT 类的数据成员不能具有此类型

内部垃圾回收指针可能会指向托管或 WinRT 类的内部。 因为它们比整个对象的指针慢,并且需要垃圾回收器进行特殊处理,因此你不能将内部托管的指针声明为类的成员。

以下示例生成 C3160:

// C3160.cpp
// compile with: /clr
ref struct A {
   // cannot create interior pointers inside a class
   interior_ptr<int> pg;   // C3160
   int g;   // OK
   int* pg2;   // OK
};

int main() {
   interior_ptr<int> pg2;   // OK
}