cod*_*ion 1 c++ pointers function
我已经搜索过但找不到任何结果(我的术语可能已关闭)所以请原谅我,如果以前曾经问过这个问题.我可能使用了错误的搜索关键字.
我理解如何使用vtable来处理指针上的虚函数调用,特别是当"免费使用"漏洞发挥作用时.但是,假设你有一个指向myclass的指针,并且当myfunction未虚拟实现时你调用函数myfunction?根据一点读数,有一个较少的获取,IE而不是获取函数的地址,然后获取函数,然后调用,它是直接获取.
令我困惑的是,如果在使用之前释放了指向myclass的指针,它将如何工作.编辑:上一段不清楚,我试图弄清楚可能会出现什么样的未定义行为.
任何人都可以为我清除这个吗?如果我的问题不清楚,我会澄清......
CodeLion
编辑:
MyClass *myclass;
free(myclass);
myclass->DoSomething();
Declaration of DoSomething()
void DoSomething{...} // NOT virtual void DoSomething
Run Code Online (Sandbox Code Playgroud)
简短的回答是未定义的行为.
长期答案基于典型的C++实现.
对于非virtual方法,该方法基本上是一个带有额外参数的函数,该参数被自动传递调用this:通常也使用非典型调用约定,但这并不重要.
因此foo->method()变为Foo::method(foo)有效,传递一个坏(释放)foo就像传递任何其他坏/被释放的参数一样.
依赖于此是一个坏主意,因为如果您使用无效this来调用非virtual方法,编译器可以随意使用.
| 归档时间: |
|
| 查看次数: |
189 次 |
| 最近记录: |