#include <iostream>
#include <vector>
using namespace std;

class A {
public:
    int num = 0;
    A* parent = nullptr;

    A(){ cout << "A created: " << this << endl; }

    A(const A &s) : num(s.num), parent(s.parent)
    {
    	cout << "A copied: " << &s << " -> " << this << endl;
    }

    ~A(){ cout << "A destroyed: " << this << endl; }

    vector<A> foo(A &a)
    {
        A a1;
        a1.num = a.num;
        a1.parent = &a;
    
        vector<A> list;
        list.reserve(1);
        list.push_back(a1);
        
        A &temp = list.front();
    
        cout << "(foo) temp.parent: " << temp.parent << ", num: " << temp.parent->num << endl;

        return list;
    }
}; 

int main()
{
    A a; 
    a.num = 2;

    vector<A> list = a.foo(a);

    A &temp = list.front();

	cout << "(main) temp.parent: " << temp.parent << ", num: " << temp.parent->num << endl;

    return 0;
}