#include"iostream"
using namespace std;
class base{
public:
void f()
{
cout<<"base f:"<<endl; // prints base f:
}
};
int main()
{
base *b; // even same out put with " base *b =NULL; "
b->f();
return 0;
}
O / p:base f:
任何人都可以解释如何调用函数而不将对象分配给指针。
Thanks.
答案 0 :(得分:3)
调用未初始化(或初始化为0)指向对象的成员函数是未定义的行为,但是它可能有效,因为没有尝试访问对象的变量,这里没有vtable。您可以查看此功能,如
void f_base(base* p)
{
cout << "base f:" << endl;
}
没有访问权限 - 没有错误,在所有现代编译器上它都可以工作,但它可以随时更改。
答案 1 :(得分:0)
这是无效代码,但由于base :: f()中没有任何内容访问成员变量,因此不会触及无效内存。
如果你添加一个成员并尝试在该功能中打印出来,你几乎无疑会崩溃。
答案 2 :(得分:0)
您需要使用new
即
base *b; // even same out put with " base *b =NULL; "
应该是
base *b = new base;
...需要delete
来防止内存泄漏