Sit*_*esh 2 c++ inheritance rtti typeid unique-ptr
我遇到了一段代码,typeid用来获取unique_ptr指向多态对象的类型。
class B{virtual void foo()= 0;};
class D:public B{void foo() override{}};
int main()
{
unique_ptr<B> bd = make_unique<D>();
if (typeid(*bd) != typeid(bd.get()))
{
cout<<"Object types are not same"<<endl;
}
cout<<"Type name of *bd.name(): "<<typeid(*bd).name()<<endl;
cout<<"Type name of bd.get().name(): "<<typeid(bd.get()).name()<<endl;
}
Run Code Online (Sandbox Code Playgroud)
输出为:
Object types are not of same
Type name of *bd.name(): 1D
Type name of bd.get().name(): P1B
Run Code Online (Sandbox Code Playgroud)
get()的输出与使用*取消引用的输出name()不同。另一个观察结果是,当类中没有定义虚函数时(上述示例中没有),get()和*都打印相同的输出。void foo()
问题:
当类中没有虚函数时,为什么get()和*给出不同的输出?
实时示例:https : //gcc.godbolt.org/z/Tiy-Cn
EDIT-1根据unique_ptr上的*,它说“返回* this拥有的对象,等效于* get()。”
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |