mix IDE M2

Integrated debugger;
Hit F5 and you can step forwards/backwards through execution.

So, two reasons :) Making it a member property (even if it's a pointer) is RAII, or "resource acquisition is initialization". I've personally found this to be a very solid approach for developing with c++ because the object lifecycle is guaranteed to operate in accordance with the data model rather than code. A dependency graph based on the data model would show that AssemblyDeubggerCtrl depends on the ApplicationCtx; or in other words, another developer reading the code can quickly see the dependency -- whether it's a singleton or not. The second purpose would be to reduce code complexity -- not having to call a->b->getInstance() throughout every method, so as to reduce code duplication.