删除对象(具有不同类型)的引用时会发生什么情况?
What happens when a reference of an object (with different types) is deleted?
我对下面的代码中的引用如何工作感到困惑。 据我了解,b 只是 d1 的别名。那么delete &b
和delete 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
很重要。让你的析构函数成为虚拟的,你就会侥幸逃脱,因为这就是多态性的工作原理。否则,您将具有未定义的行为,并且您的程序没有任何意义。
相关文章:
- 将指针分配给另一个指针时会发生什么情况?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 在什么情况下,我想在 C/C++ 代码中使用内联汇编代码
- 发生注入类名时会发生什么情况?(C++)
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 重新分配向量时,向量中的内存会发生什么情况
- 如果结构中的字符串比使用的 p/调用签名长或短,会发生什么情况?
- 为什么或在什么情况下,你会将参数作为C++中的引用(或指针)传递给函数?
- 如果我向一个12字节的缓冲区写入的字节数少于12,会发生什么情况
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 如果我在 c++ 中以 new 的放置形式使用没有足够的内存,会发生什么情况?
- 使用 Google 基准测试时返回值会发生什么情况?
- 正在连接的等待条件变量的线程会发生什么情况?
- 如果未定义的C++行为符合 C 定义的行为,会发生什么情况?
- 在 C++ 中取消引用字符串时会发生什么情况
- 通过引用设置类时会发生什么情况
- 如果参数传递两次,会发生什么情况?一次按值,一次按引用?是否会修改
- 未分配返回未定义对象类型引用的 C++ 函数的返回值时会发生什么情况
- 当按引用传递参数存储在被调用方对象中,然后被调用方删除时会发生什么情况
- 取消引用不返回的函数时会发生什么情况?