2010-07-22 4 views

ответ

6

Никакой нарезки не произойдет; unique_ptr<Base> будет принадлежать указателю на объект Derived.

A unique_ptr в производный класс может быть неявно преобразован в unique_ptr в базовый класс.

2

(ваш пример не компилируется в текущем редактирования, я просто буду считать, что ваше намерение было)

Нет, это не так. Slicing относится к копированию производных объектов в базовый объект, а не в производный указатель на указатель Base (здесь уникальная_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

Любой нарезка, что может произойти, будет происходить от типа элемента контейнера. Объекты, содержащиеся косвенно, не затрагиваются.

 Смежные вопросы

  • Нет связанных вопросов^_^