电话
400 9058 355
News
throw必须抛出对象而非裸指针或字面量,如throw"error"或thrownullptr会调用std::terminate();catch需按派生类到基类顺序书写,否则基类catch会截获所有派生异常。
虚继承解决菱形继承导致的二义性和数据冗余问题:当B、C均继承A,D继承B和C时,若不虚继承,D中会存在两份A子对象,访问A成员将报ambiguous错误。
虚函数实现运行时晚绑定,使Base*或Base&能根据实际对象类型调用派生类重写函数;必须在基类显式声明virtual,不可用于static函数、构造函数、内联函数和友元函数;析构函数通常需virtual以防资源泄漏。
虚继承通过共享唯一虚基类子对象解决菱形继承二义性,引入vbptr/vbtable导致内存和性能开销,且需最派生类显式调用虚基类构造函数;它不解决同名成员或接口二义性,仅适用于标准库等极少数需单实例基类语义的场景。
纯虚析构函数必须定义,否则链接失败;接口类析构函数必须为virtual以确保多态销毁安全;是否纯虚取决于是否禁止实例化;现代C++优先使用virtual~X()=default;。
dynamic_cast返回nullptr当且仅当对指针进行向下转型时,源对象并非目标类型或其派生类,且源类型为多态(含虚函数);若源类型非多态则编译报错,对引用失败则抛std::bad_cast。
vtable是C++运行时多态的核心机制,由编译器为含虚函数的类生成只读函数指针数组,按声明顺序存储虚函数地址;对象首部隐式包含vptr指向对应vtable,调用时通过vptr+vtable索引动态分派。
邮箱:8955556@qq.com
Q Q:8955556