請考慮下面的代碼:爲什麼發生切片?
Base b;
if (something)
b = DerivedA();
else
b = DerivedB();
這是衆所周知,在這樣的情況下,「切片」時:在C++中,我們不能分配鹼的變量類型的派生類型的對象;該對象將被「切割」掉任何未在基類型中定義的東西。 (如果我們想要做這樣的事情,我們必須使用指針或引用)。
我想了解這個的實際原因。也就是說,Base
變量在沒有切片的情況下不能容納Derived
對象。
我的假設是,這樣做的原因是,Base
對象和Derived
對象可能不是相同的大小,因此,我們不能能夠存儲整個Derived
對象在Base
變量做出保證。 A Base
可能佔用4個字節,而Derived
爲7個字節。所以我們決定總是對派生對象進行切片以適應基本類型的大小。
我們是能夠用指針做到這一點,因爲它們都佔用相同數量的內存。
這個假設是否正確?如果不是,切片的實際原因是什麼?
你回答你自己的問題。 7字節不能進入4. – 2014-10-16 22:04:09
@MattMcNabb好吧,那是我的假設,想要確定。想想也許這是更多的設計問題。順便說一句,爲什麼我們不能調整變量來適應指定的對象? – 2014-10-16 22:04:47
這正是切片所做的。這只是不按照你想要的方向調整大小。 – 2014-10-16 22:06:06