vptr名称在c++中已损坏
is vptr name mangled in c++?
尽管有很多关于如何在c++中处理虚拟函数的文章,但我还是无法消除一个基本的疑问。派生类的vptr变量被基类变量覆盖。ptr变量的名称也被篡改了吗?
Class Base
{
public:
virtual void test();
};
class Derived
{
public:
virtual void test();
};
如果我打电话给
Base b = new Derived();
b->test();
它转换为
(*b->vptr[<index>])(b);
其中索引指向vtable条目。
我的疑问是这个vptr是否也被名字篡改了?
C++标准甚至不承认多态类中存在vptr
,因为这是一个实现细节,因此编译器甚至不需要以这种方式实现虚拟函数。所以不,vptr
不是一个保留关键字(我想你是想问这个问题)。
您无法通过语言手段访问C++中的vptr,因此请在"no"中回答-没有这样的变量和名称,因此没有其损坏:)
相关文章:
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 为什么C中的通用链表中存储的数据已损坏
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 两个垫子的 OpenCV 数据是相同的,但使用 Mat::at 检索时的值已损坏
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- 变量周围的堆栈'sortArray'已损坏
- 变量周围的堆栈'folderPath'已损坏
- 在为 iOS 构建 aws-sdk-cpp 时,cmake 上的 CXX 编译器错误已损坏
- 运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
- AES-128 CFB-8解密的前16个字节已损坏
- 运行时检查失败 #2 - 变量"l1"周围的堆栈已损坏
- C++:此代码可以编译,但引发运行时检查失败 #2 - 围绕变量周围的堆栈'num'已损坏。发生
- 图像在本地主机上显示已损坏
- 检查工作正常的 CXX 编译器:/cygdrive/c/cygwin64/bin/clang++ -- 已损坏
- 数组变量周围的堆栈已损坏
- 运行时检查失败 - 变量周围的堆栈已损坏
- 串行端口的传入值有时已损坏或丢失
- 自定义异常中的消息已损坏