Ric*_*ard 4 c++ visual-studio-2010 visual-c++
以下代码正确编译并获得神秘的输出:
特殊投资功能00000000
(环境:C++ VS2010)
#include <iostream>
#include <vector>
using namespace std;
class Security {
public:
virtual ~Security() {}
};
class Stock : public Security {};
class Investment : public Security {
public:
void special() {
cout << "special Investment function" << endl;
}
};
int main() {
Security* p = new Stock;
dynamic_cast<Investment*>(p)->special();
cout << dynamic_cast<Investment*>(p) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
怎么会这样?取消引用NULL指针并获得"正确"输出而不是崩溃?它是VS2010的特殊"特征"吗?
现在我明白了.我做了一个测试,似乎在"特殊"功能中解除引用"this"会导致程序崩溃.
谢谢你的帮助.
取消引用空指针是未定义的行为 - 您可以获得意外的结果.看到这个非常相似的问题.
在这种情况下Investment::special(),以非虚方式调用,因此您可以认为编译器只是创建了一个全局函数
Investment_special_impl( Investment* this )
Run Code Online (Sandbox Code Playgroud)
并调用它传递一个空this指针作为隐式参数.
你不应该依赖于此.
| 归档时间: |
|
| 查看次数: |
959 次 |
| 最近记录: |