2010-07-22 89 views

回答

6

不會發生切片; unique_ptr<Base>將擁有指向Derived對象的指針。

A unique_ptr到派生類可隱式轉換爲unique_ptr爲基類。

2

(你的例子並不在當前編輯編譯,我只是要假設你的意圖是什麼)

不,不。切片是指將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); 
} 
1

任何切片可能發生的。間接包含的對象不受影響。