Finalizadores y operadores de C ++ / CLI
-
06-07-2019 - |
Pregunta
En el siguiente ejemplo, obtengo:
error C2300: 'UnmanagedClass' : class does not have a finalizer called '!SmartPointer'
Si elimino el operador, > ;, este error desaparece. ¿Alguien podría explicar por qué sucede esto?
// 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);
}
Solución
Estás anulando el - > operador, entonces cuando lo haces:
~SmartPointer() { this->!SmartPointer(); }
Estás llamando efectivamente
~SmartPointer() { m_ptr->!SmartPointer(); }
Creo que puedes solucionar esto haciendo esto, sin embargo:
~SmartPointer() { (*this).!SmartPointer(); }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow