unique_ptr<Derived> = new deriv;
std::vector<unique_ptr<Base>>.push_back(std::move(deriv));
將DERIV切片鍵入unique_ptr<Base>
?
unique_ptr<Derived> = new deriv;
std::vector<unique_ptr<Base>>.push_back(std::move(deriv));
將DERIV切片鍵入unique_ptr<Base>
?
不會發生切片; unique_ptr<Base>
將擁有指向Derived
對象的指針。
A unique_ptr
到派生類可隱式轉換爲unique_ptr
爲基類。
(你的例子並不在當前編輯編譯,我只是要假設你的意圖是什麼)
不,不。切片是指將Derived對象複製到Base對象中,而不是將Derived指針複製到Base指針中(這裏,unique_ptr是一個紅色鯡魚)。
這導致切片:
class a { };
class b : public a { };
void foo(a myvar) { };
int main()
{
b myb;
foo(myb);
}
這不:會發生在容器的元素類型
class a { };
class b : public a { };
void foo(a* myvar) { };
int main()
{
b myb;
foo(&myb);
}
任何切片可能發生的。間接包含的對象不受影響。