C ++/CLI -Finalizer und -Operatoren
-
06-07-2019 - |
Frage
Im folgenden Beispiel bekomme ich:
error C2300: 'UnmanagedClass' : class does not have a finalizer called '!SmartPointer'
Wenn ich den Bediener entferne, wird dieser Fehler verschwindet. Könnte jemand erklären, warum das passiert?
// Unmanaged class.
class UnmanagedClass { };
public ref class SmartPointer {
public:
SmartPointer(UnmanagedClass* u) : m_ptr(u) { }
~SmartPointer() { this->!SmartPointer(); }
!SmartPointer() { delete m_ptr; }
// This line triggers C2300.
UnmanagedClass* operator->() { return m_ptr; }
};
int main() {
SmartPointer^ s = gcnew SmartPointer(new UnmanagedClass);
}
Lösung
Sie überschreiben den -> Operator. Wenn Sie also:
~SmartPointer() { this->!SmartPointer(); }
Sie rufen effektiv an
~SmartPointer() { m_ptr->!SmartPointer(); }
Ich glaube, Sie können dies jedoch damit umgehen:
~SmartPointer() { (*this).!SmartPointer(); }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow