我们可以在不分配内存的情况下调用类的成员函数吗?

时间:2014-09-09 09:34:37

标签: c++

我试过这个:

class A{
    void fun()
    {
        cout<<"Hello World";
    }
};

int main()
{
    A* obj;
    obj->fun();
}

打印“Hello World”。但我没有分配任何记忆。

4 个答案:

答案 0 :(得分:8)

有问题的代码使用未定义的行为,使用指针的不确定值。

它可能会崩溃或做任何事情,包括它可能会起作用。

如果成员函数不需要实例,请将其设为static成员函数;然后你可以像A::fun()一样调用它。

答案 1 :(得分:0)

这是一种未定义的行为,因为指针具有未定义的值。即使您尝试将值0分配给obj,那么obj->fun()也将是未定义的,并将导致未定义的行为。

C ++标准说:

  

如果左值引用的对象不是T类型的对象   并且不是从T派生的类型的对象,或者对象是   未初始化,需要进行此转换的程序   未定义的行为。

答案 2 :(得分:0)

你可以这样做 -

#include <stdio.h>

class A{

public:
static void fun()
{
    printf("Hello World\n");
}
};

int main()
{
    A::fun();
}

<强>优势:

  1. 无需创建对象。
  2. 通过添加此类的标题,您可以从任何地方调用此函数。

答案 3 :(得分:0)

§9.3.1[class.mfct.non-static] / p2:

  

如果为对象调用类X的非静态成员函数   该行为不属于X类型,也不属于X类型   未定义。