[英]Dynamic memory allocation Mechanism to a class object with list variables in c++
[英]Is there a mechanism in C++ to make a full copy of a derived class from a base class pointer without dynamic memory allocation?
请考虑以下示例,其中在取消引用基指针期间发生对象切片。
#include <stdio.h>
class Base {
public:
virtual void hello() {
printf("hello world from base\n");
}
};
class Derived : public Base{
public:
virtual void hello() {
printf("hello world from derived\n");
}
};
int main(){
Base * ptrToDerived = new Derived;
auto d = *ptrToDerived;
d.hello();
}
我希望变量d
保存Derived
类型的对象而不是Base
类型的对象,没有动态内存分配,也没有显式强制转换。
我已经看过这个问题了 ,但是答案中提出的解决方案需要动态内存分配,因为它返回一个指向新对象的指针,而不是新对象的值。
这在C ++ 11中是否可行?
不,这是不可能的,因为如果d
没有动态存储持续时间,那么它必须具有静态,线程或自动存储持续时间,并且在所有这些情况下,对象的类型在编译时是已知的。 在您的情况下,您希望在运行时确定对象的类型,因为ptrToDerived
可能指向Base
对象或Derived
对象或从Base
派生的某个其他类的对象。
如果您关注的是生命周期和内存泄漏,请让clone
返回std::unique_ptr<Base>
而不是Base*
。
我想你的意思是你想要auto
演绎到D
但是这是不可能的:所有类型必须在编译时知道。 想象一下,如果代码是:
Base *b = some_func();
auto d = *b;
编译器无法知道b
指向的动态类型,因为它可能直到运行时才会被确定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.