Cześć mam problem z zrozumieniem fragmentu kodu z "testu rekrutacyjnego".
Otóż mamy taki kod:
#include <iostream>
struct A
{
~A() { printf("~A"); }
};
struct B
: A
{
~B() { printf("~B"); };
};
int main()
{
std::unique_ptr < A > x(new B); //wariant 1
return 0;
}
Moje pytanie brzmi czemu wynik tego to "~A" zamiast "~B~A" jak bym się spodziewał?
Kiedy w szablon wsadzam klasę pochodną:
std::unique_ptr < B > x(new B); //wariant 2
Wynik jest taki jak chcę. Rozumiem takie zachowanie kiedy by była tylko klasa bazowa wywołana:
std::unique_ptr < A > x(new A); //wariant 3
Ale jednak w tym wariancie 1 jest tworzony obiekt "B", więc dlaczego nie jest wywoływany jego [obiektu "B"] destruktor?