【发布时间】:2021-10-15 10:02:27
【问题描述】:
#include <iostream>
using namespace std;
#define debug(x) cout << #x << ": " << (x) << endl;
class Base {
public:
void f() { cout << "Base:f()" << endl; }
~Base() { cout << "Base:~Base()" << endl; }
};
class A : public Base {
public:
~A() { cout << "A:~A()" << endl; }
};
int main() {
{
A a;
static_cast<Base>(a);
}
return 0;
}
在这段代码中
我打电话给static_cast 将 A 转换为 Base,
输出告诉我它调用~Base() 两次?
为什么static_cast 会调用析构函数?
【问题讨论】:
-
你可能想要
static_cast<Base&>(a);。 -
你不能改变事物的类型。转换,无论是否显式,都不会真正将对象转换为不同的类型;它会根据您转换的内容创建具有目标类型的新内容。
标签: c++ static-cast