与“虚函数”相关的TAG标签
虚函数是C++唯一原生运行时多态机制,通过vtable/vptr实现动态绑定;析构函数必须virtual以防资源泄漏;override强制校验重写签名,构造中调用虚函数无效。
noexcept能在特定场景下提升性能,但仅当编译器确信调用链全为noexcept且可跳过异常处理机制时才生效;它影响函数类型、重载决议和trait判断,误用会导致崩溃或编译失败。
静态成员函数只能通过类名或对象调用,不依赖this,故不能访问非静态成员;静态成员变量需在类外定义(const整型和C++17inlinestatic除外);静态函数不可为virtual;其生命周期全局,线程安全与初始化顺序需手动管理。
类是编译器识别的内存布局规则与函数绑定约定,本质为结构体加vtable语法糖;空类sizeof为1,含虚函数则至少8字节;对象内存位置决定生命周期,this是隐式传入的常量指针。
final用于禁止继承或重写:类定义中写在花括号前(classBasefinal{...};),虚函数声明末尾加final(virtualvoidfoo()constfinal;),C++11起支持,需指定标准版本。
struct成员默认public,class默认private;struct继承默认public,class默认private;struct倾向POD类型和C兼容,class强调封装与资源管理。
functor是重载了operator()的类,可像函数一样调用且带有状态;如Adder(5)(10)返回15,它非函数指针也非lambda,但支持内联优化与模板推导,适用于需携带不变数据的泛型场景。
构造函数中new失败会抛std::bad_alloc,此时已构造的成员按逆序析构,对象内存自动释放,但未完成构造的部分不析构;应使用RAII(如unique_ptr)而非手动清理。
构造函数不能是虚函数,因为虚函数机制依赖的虚表指针(vptr)在构造过程中尚未就绪,且构造语义与运行时多态冲突;析构函数则可以且常需声明为virtual以确保正确清理。
typeid用于获取变量运行时类型信息,需包含头文件;对多态类型才体现运行时特性,其name()返回实现定义的编码名,可用abi::__cxa_demangle解码,类型比较应使用==操作符而非字符串比较。
