C++中通过派生类创建基类引用的代码解析请求
C++代码逻辑解析
先梳理代码的基础结构:
Base是基类,定义了构造函数;Deriv是公有继承Base的派生类,同样拥有自己的构造函数。当创建Deriv对象时,会先调用Base的构造函数,再执行Deriv的构造函数。
重点解析最后一行代码Base &foo = *(new Deriv());:
- 对象创建与解引用:
new Deriv()会在堆内存上分配并构造一个Deriv对象,返回指向该对象的指针;*运算符解引用这个指针,得到堆上的Deriv对象实例。 - 基类引用绑定派生类对象:将
Deriv对象绑定到Base&类型的引用foo上,这是C++多态的常见用法——通过基类引用可以操作派生类对象,后续如果Base类有虚函数,通过foo调用时会自动触发Deriv类的对应实现(前提是Deriv重写了该虚函数)。 - 潜在风险:这段代码存在严重的内存泄漏问题。
new创建的对象需要用delete手动释放,但foo是引用类型,无法直接用delete foo来释放内存,必须先将其转换为指针类型(比如delete static_cast<Deriv*>(&foo)),但这类操作很容易被遗漏,导致堆上的Deriv对象永远无法被回收。
内容的提问来源于stack exchange,提问作者Panos Kontogiannis
相关产品推荐
相关产品推荐

