阅读this MSDN article ,我遇到了这个简单的例子,它非常适合我,因为我做了一些 RAII一些 native C++ 接口(interface)上的类完成整个工作:(这是我第一次这样做)
ref class Wrapper {
Native *pn;
public:
// resource acquisition is initialization
Wrapper( int val ) { pn = new Native( val ); }
// this will do our disposition of the native memory
~Wrapper(){ delete pn; }
void mfunc();
protected:
// an explicit Finalize() method—as a failsafe
!Wrapper() { delete pn; }
};
这个类与我迄今为止所写的内容完全一致。保存的是我没有实现 Finalize 方法。但是,在想知道它的特殊性和用法之前,在我能更深入地掌握它之前……我想知道将 Finalizer 方法放在 protected 范围内是否是一般用途和良好习惯。
最佳答案
终结器的访问修饰符基本上被忽略,因为终结器有特殊规则:
- 不能直接调用它们(即使是从类本身内部)。
- 当系统调用时,它们会自动调用其基类终结器。
正式来说,终结器是在对象上声明的 protected 虚拟方法:http://msdn.microsoft.com/en-us/library/system.object.finalize.aspx 。在 C# 中,您无法在终结器上放置可访问性修饰符。
在 C++/cli 中,您可以指定任何访问修饰符,但它本质上会被忽略。也就是说,公开或私有(private)化不会改变任何事情:特殊规则仍然执行。
所以,我想说,继续根据惯例对其进行保护。
关于c++-cli - 为什么 Finalize 应该受到保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5897435/