[...]
So calling "test()" construtor, in my logic, will do the following:
- i want to initialize "b", but what does "f" refer to?
- ok let's find "f" and initialize it,
- good found "f", but what "a" refers to?
-look for "a",
-ok "a" is an 'int', initialized to be equal to 22.
- let's back track,
- "f", inited
- "b" , inited
- "test" constructed
Now in case any of the members throw an exception, then all the members data that were fully constructed are allowed to call their destructor. Exactly as per the standard "potentially constructed -> potentially call destructor"
That was my mental model, and that was how i would implement it.