- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我找到了 The rule of Zero正如在 Peter Sommerlads Slides 中也提到的那样(第 32 页)非常引人注目。
虽然,我似乎记得有一个严格的规则,必须定义析构函数 virtual,如果类有 < strong>虚拟成员并且实际上是派生的。
struct Base {
virtual void drawYourself();
virtual ~Base() {}
};
struct Derived : public Base {
virtual void drawYourself();
};
析构函数的主体甚至可以是空的(它只需要 vtbl 中的条目)。
我好像记得用hierarchy的时候
int main() {
Base *obj = new Derived{};
obj->drawYourself(); // virtual call to Derived::drawYourself()
delete obj; // Derived::~Derived() _must_ be called
}
那么delete obj
调用正确的析构函数就很重要了。是否正确,如果我完全省略析构函数定义,它将不会变为虚拟,因此会调用错误的 d'tor?
struct Base {
virtual void drawYourself();
// no virtual destructor!
};
这引出了我的最后一个问题:
编辑:正如我在回答中提醒的那样,我的问题的 1sr 版本有错误的假设。相关(虚拟)析构函数在 Base
中,而不是在 Derived
中。但我的问题是:我是否需要声明(虚拟)析构函数?
最佳答案
实际上是基类析构函数必须声明为virtual,并且在派生类中自动为virtual:
struct Base {
virtual void drawYourself();
virtual ~Base() = default;
};
struct Derived : public Base {
virtual void drawYourself();
};
但除此之外,零规则仍然成立。
如果你按照你做的方式去做,或者如果你省略了 virtual
析构函数,当通过基类delete
派生对象时,你只会得到未定义的行为指针。
关于c++ - "The Rule of Zero"是否也适用于具有虚方法的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21637250/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!