我觉得,至少在这一种情况下:用引用会很难受。
MyClass *mc; do { // 或者 switch,或者其他必须要加大括号的程序块内 // 。。。 if (aaa) mc = new MyClass(bbb); else mc = new MyClass(ccc); // 。。。 } while (ddd); // do while 循环可以替换成 switch 等其他控制结构。 do_something(mc); // 在结构之外需要用到该指针。
引用要求在声明的同时必须初始化并且之后不可修改,然而上述例子中,在结构体内初始化会使得该指针无法作用到大括号之外。
如果一个指针必须在结构体外定义,在结构体内初始化,并且在结构体结束之后使用。那么用引用实现同等功能会非常难受。