How to: Overload Functions with Interior Pointers and Native Pointers (C++/CLI)
Visual Studio 2015
The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
Functions can be overloaded depending on whether the parameter type is an interior pointer or a native pointer.
This language feature is supported by the /clr compiler option, but not by the /ZW compiler option. |
Code
// interior_ptr_overload.cpp
// compile with: /clr
using namespace System;
// C++ class
struct S {
int i;
};
// managed class
ref struct G {
int i;
};
// can update unmanaged storage
void f( int* pi ) {
*pi = 10;
Console::WriteLine("in f( int* pi )");
}
// can update managed storage
void f( interior_ptr<int> pi ) {
*pi = 10;
Console::WriteLine("in f( interior_ptr<int> pi )");
}
int main() {
S *pS = new S; // C++ heap
G ^pG = gcnew G; // common language runtime heap
f( &pS->i );
f( &pG->i );
};
Output
in f( int* pi ) in f( interior_ptr<int> pi )
Show: