gpt4 book ai didi

c++ typeid 使用 get() 和 * 为相同的 unique_ptr 返回不同的值

转载 作者:行者123 更新时间:2023-12-01 17:17:19 24 4
gpt4 key购买 nike

我遇到了一段代码,其中 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;
}

输出是:

Object types are not of same 
Type name of *bd.name(): 1D
Type name of bd.get().name(): P1B

name() 的输出对于 get() 是不同的并用 * 取消引用。另一个观察结果是,当类中没有定义虚函数时[在上面的示例中没有 void foo()],get() 和 * 都会打印相同的输出。

问题:

当类中没有虚函数时,为什么 get() 和 * 给出不同的输出?

实例:https://gcc.godbolt.org/z/Tiy-Cn

编辑1根据* on a unique_ptr ,它表示“返回*this拥有的对象,相当于*get()。”

最佳答案

*bd 返回一个引用。

bd.get() 返回一个指针。

<小时/>

回复:您的编辑:请注意,它说“相当于 *get()”,而不是“相当于 get()”。

关于c++ typeid 使用 get() 和 * 为相同的 unique_ptr 返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58541803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com