#include <iostream>

struct A
{
    A() { std::cout << this << " constructed via A()\n"; }
    A(const A&) { std::cout << this << " constructed via A(const A&)\n"; }
    ~A() { std::cout << this << " destructed via ~A()\n"; }
};

struct B
{
    A a;

    B(const A& a) 
        : a(a) { std::cout << this << " constructed via B(const A&)\n"; }

    ~B() { std::cout << this << " destructed via ~B()\n"; }
};

int main()
{
    A a;
    B b(a);
}