gpt4 book ai didi

.net - C++/CLI 终结器和运算符

转载 作者:行者123 更新时间:2023-12-01 00:07:11 25 4
gpt4 key购买 nike

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

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

最佳答案

您正在覆盖 -> 运算符,因此当您执行以下操作时:

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

你有效地打电话
~SmartPointer() { m_ptr->!SmartPointer(); }

不过,我相信您可以通过这样做来解决这个问题:
~SmartPointer() { (*this).!SmartPointer(); }

关于.net - C++/CLI 终结器和运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/830663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com