电话
400 9058 355
News
手写链表Queue需同时维护head和tail指针:push在tail端O(1),pop在head端O(1);Node构造函数必须显式初始化next为nullptr;判空统一用head==nullptr;拷贝需深拷贝或禁用。
Go链表必须用结构体+指针实现,Next字段必须为*ListNode类型,插入需注意指针赋值顺序,遍历时须先判nil再解引用,GC不自动管理非内存资源。
虚继承解决菱形继承导致的二义性和数据冗余问题:当B、C均继承A,D继承B和C时,若不虚继承,D中会存在两份A子对象,访问A成员将报ambiguous错误。
虚函数实现运行时晚绑定,使Base*或Base&能根据实际对象类型调用派生类重写函数;必须在基类显式声明virtual,不可用于static函数、构造函数、内联函数和友元函数;析构函数通常需virtual以防资源泄漏。
thread_local变量在每个线程首次访问时构造(主线程在定义点构造),线程结束前析构;POD类型不自动零初始化,动态初始化线程安全;析构仅同线程内逆序,跨线程无序。
纯虚析构函数必须定义,否则链接失败;接口类析构函数必须为virtual以确保多态销毁安全;是否纯虚取决于是否禁止实例化;现代C++优先使用virtual~X()=default;。
splice是节点移动而非复制,不调用构造/析构函数,指针仍有效;仅限同类型同分配器list间操作;三种重载分别移动整个容器、单个节点或范围;目标迭代器不失效,源中被移节点的迭代器仍有效但不可用于原容器操作。
邮箱:8955556@qq.com
Q Q:8955556