Встретился интересный учебный пример:
#include <iostream>
class A
{
public:
A() {
std::cout << "+A";
}
~A() {
std::cout << "-A";
}
};
class B : public A
{
public:
B() {
std::cout << "+B";
}
~B() {
std::cout << "-B";
}
};
void func( A a)
{
}
void main()
{
B b;
func(b);
}
Выдача по нему: +A+B-A-A-B-A
При передаче параметра в функцию, по-видимому, вызывается дефолтный копирующий конструктор (в выдачу он не попадает), соответственно, третья -A объясняется вызовом парного деструктора
при выходе из функции. А вот чем объяснить четвёртую -A?