【发布时间】:2019-06-25 13:04:57
【问题描述】:
我创建了一个函数,它返回指向在 func 中创建的派生对象的基指针。 好像不行啊!好像派生的数据丢失了,指针指向一个基础对象……
有一个类Request,它是基类, 并且有类 loginRequest - 它派生请求。为了检查对象的类型,我打印了对象的名称 (typeid(*r).name())。 在 func() 内部,打印输出结果是“loginRequest”,这很好,因为这是指向的对象。 (看代码) 但是在返回这个指针之后,当我再次打印它的类型时,结果是“请求”。你们能帮帮我吗?为什么返回的指针会丢失派生数据?
Request * r = new Request();
r = func(); // r is now supposed to point the LoginRequest object.
std::cout<< typeid(*r).name() <<std::endl; //print the type of OBJECT
//func
Request * func()
{
Request * r;
LoginRequest l = LoginRequest();
r = &l;
std::cout<< typeid(*r).name() <<std::endl; //print the type of OBJECT
return r;
}
【问题讨论】:
-
你的对象是本地的;一旦函数返回,它就消失了。
-
对象“LoginRequest l”?那我该怎么办?
-
按值返回或返回一个指向动态分配的(智能)指针。
-
请不要使用
new。使用std::unique_ptr。
标签: c++ function polymorphism downcast