4

次の例では、次のようになります。

error C2300: 'UnmanagedClass' : class does not have a finalizer called '!SmartPointer'

演算子->を削除すると、このエラーはなくなります。誰かがこれが起こっている理由を説明できますか?

// 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);
}
4

1 に答える 1

5

->演算子をオーバーライドしているので、次のようにします。

~SmartPointer() { this->!SmartPointer(); }

あなたは効果的に呼んでいます

~SmartPointer() { m_ptr->!SmartPointer(); }

ただし、これを行うことでこれを回避できると思います。

~SmartPointer() { (*this).!SmartPointer(); }
于 2009-05-06T17:11:29.513 に答える