代码之家  ›  专栏  ›  技术社区  ›  Ryan

C++/CLI终结器和操作符

  •  4
  • Ryan  · 技术社区  · 17 年前

    在下面的示例中,我得到:

    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);
    }
    
    1 回复  |  直到 17 年前
        1
  •  5
  •   Reed Copsey    17 年前

    您将覆盖->运算符,因此执行此操作时:

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

    你在打电话

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

    我相信你可以通过这样做来解决这个问题,尽管:

    ~SmartPointer() { (*this).!SmartPointer(); }
    
    推荐文章