在以下程序中。
#include<iostream>
using namespace std;
class Base{
public:
Base(){
cout<<"I am Constructor"<<endl;
}
void method();
};
void Base::method(){
cout<<"I am method"<<endl;
}
int main()
{
Base *sc1;
Base *sc2;
sc1->method();
sc2->method();
}
我得到的输出如下
I am method I am method
如果没有创建对象,这怎么会发生?
答案 0 :(得分:5)
这是未定义的行为,所以“任何事情”都可能发生。它可能会运行,因为您不通过this
指针访问任何内容(隐式或显式)。
这更有可能失败:
struct Foo
{
int foo() const { return i; }
int i;
};
int main()
{
Foo* f;
f->foo();
}
答案 1 :(得分:3)
因为您没有对象,您的代码具有未定义行为。未定义的行为意味着它所说的,它并不意味着你的程序会崩溃,这意味着任何事情都可能发生,包括访问一个不存在的对象。
使编程C ++变得困难的一个原因是你不能依赖有问题的程序崩溃,有时它们似乎有效。
答案 2 :(得分:2)
这是未定义的行为,但它没有崩溃,因为您没有访问该类的任何成员变量,因此即使指针sc1
/ sc2
是随机值,也不会发生任何事情。