当一个多态类的对象被创建时,vptr(指向vtable)会被初始化。vtable是一个表格,它存储了虚函数的地址。vptr是一个指针,它指向这个表格。当一个多态类的对象被创建时,vptr会被初始化为指向该类的vtable。这样,在调用虚函数时,程序可以根据vptr找到正确的函数地址来执行。
例如,假设我们有一个名为Animal的基类,其中有一个名为speak的虚函数。我们还有一个名为Dog的派生类,它重写了speak函数。当我们创建一个Dog对象时,它的vptr会被初始化为指向Dog类的vtable。这个vtable包含了Dog类的speak函数的地址。当我们调用这个Dog对象的speak函数时,程序会根据它的vptr找到正确的函数地址来执行。
总之,vptr在多态类的对象被创建时被初始化,以便在调用虚函数时能够找到正确的函数地址。
领取专属 10元无门槛券
手把手带您无忧上云