C++型变化C++类型的变化 - 虚函数问题删除期间
我读过,当你构建一个派生类型,类型的变化,这取决于构造函数被调用。因此,如果您创建派生对象并使用基指针调用虚函数,那么通常它会映射到派生类中的实现。如果您在基类构造函数中调用虚函数,它将使用基类实现,因为该对象的类型在技术上与该函数中的基类类型相同。例如(临时代码,对不起,如果它不编译):
class Base {
Base()
{
std::cerr << "Base Constructor.";
func();
}
virtual void func() {
std::cerr << "Func base called." << std::endl;
}
};
class Derived : public Base {
Derived()
{
std::cerr << "Derived Constructor.";
func();
}
void func() {
std::cerr << "Func derived called." << std::endl;
}
};
int main() {
Derived* d = new Derived;
delete d;
}
应该输出:
Base Constructor.
Func base called.
Derived Constructor.
Func derived called.
首先,这是总是正确的还是取决于执行?
如果我使用了RTTI和typeinfo,打印在底座上的类型实际上是底座的类型,还是更多的是不成文的规则类型?
从构造函数中调用虚拟函数是否有危险,或者只要知道自己在做什么,它是否安全?
“为了简化简单”和错误的。 –