[英]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.