Ostrzeżenie kompilatora (poziom 1) C4383
"instance_dereference_operator": znaczenie wyłusczenia uchwytu może ulec zmianie, gdy istnieje operator "operator" zdefiniowany przez użytkownika; pisanie operatora jako funkcji statycznej, która ma być jawna dla operandu
Po dodaniu wystąpienia zdefiniowanego przez użytkownika przesłonięcia operatora wyłudzenia w typie zarządzanym można potencjalnie zastąpić możliwość operatora wyłudzenia typu w celu zwrócenia obiektu dojścia. Rozważ napisanie statycznego, zdefiniowanego przez użytkownika operatora dereference.
Aby uzyskać więcej informacji, zobacz Handle to Object Operator (^) i Tracking Reference Operator (Operator odwołania do śledzenia).
Ponadto operator wystąpienia nie jest dostępny dla innych kompilatorów języka za pośrednictwem metadanych, do których odwołuje się odwołanie. Aby uzyskać więcej informacji, zobacz Operatory zdefiniowane przez użytkownika (C++/CLI).
Przykład
Poniższy przykład generuje kod C4383.
// C4383.cpp
// compile with: /clr /W1
ref struct S {
int operator*() { return 0; } // C4383
};
ref struct T {
static int operator*(T%) { return 0; }
};
int main() {
S s;
S^ pS = %s;
T t;
T^ pT = %t;
T% rT = *pT;
}