2010-07-22 90 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

任何切片可能发生的。间接包含的对象不受影响。