删除对象(具有不同类型)的引用时会发生什么情况?

What happens when a reference of an object (with different types) is deleted?

本文关键字:引用 什么情况 对象 同类型 删除      更新时间:2023-10-16

我对下面的代码中的引用如何工作感到困惑。 据我了解,b 只是 d1 的别名。那么delete &bdelete d1有什么区别呢?

b 是 Base 类型,但仍然是 f 类型的别名,那么它们有什么区别呢?

#include <iostream>
using namespace std;
class Base
{
public:
Base(){
cout << "Base Constructor Calledn";
}
~Base(){
cout << "Base Destructor calledn";
}
};
class Derived1: public Base
{
public:
Derived1(){
cout << "Derived constructor calledn";
}
~Derived1(){
cout << "Derived destructor calledn";
}
};
int main()
{
Derived1 *d1 = new Derived1();
Base &b = *d1;
delete &b;
}

它们按类型区分。

  • b是指类型Base的对象。

  • d1指向类型为Derived1的对象。

这些是相关但不同的类型。

你的对象是一个Derived1,而不仅仅是一个Base。这对delete很重要。让你的析构函数成为虚拟的,你就会侥幸逃脱,因为这就是多态性的工作原理。否则,您将具有未定义的行为,并且您的程序没有任何意义。

相关文章: