内存中静态方法和非静态函数的区别

时间:2011-10-05 05:31:07

标签: c++ class static-members

据我所知,类的每个实例在内存中都有自己的成员变量,因此它可以为不同的对象存储不同的值。但是,成员函数不一样。成员函数在类的对象之间重用,因此它只有一个地址和一个内存块,以便在需要时引用所有对象。

静态函数用于访问静态成员。但是,静态函数在其应用程序的生命周期中也只存在一个。除了作为静态访问器之外,在低级别它与普通的类功能没有区别,不是吗?或许我错了,每个班级都有自己的功能?

4 个答案:

答案 0 :(得分:6)

非静态函数接受附加参数this,它是指向具有特定于实例的变量的类实例的指针。

静态函数没有此参数(因此您不能在静态函数中使用this并且只能访问静态数据成员。)

答案 1 :(得分:2)

这在语言与语言之间有所不同,但在C或C ++ 03中,函数通常映射在汇编函数上;它们在内存中存在一次(无论是自由函数,类函数还是类静态函数),并将参数作为参数,包括隐式成员函数的this指针。

在C ++ 11中,lambda函数引入了一个新颖性:所谓的函数的每个实例都会带有一些状态。从实现的角度来看,它意味着需要创建“常规”功能,并且它与匿名数据包相关联(如果需要)。每次创建lambda时都不需要复制该函数,但数据会这样做。一个有用的数字是要记住lambdas(在C ++中)替换函数对象(或谓词对象):它们只是语法糖,实现类似。

答案 2 :(得分:0)

static和member函数之间的唯一区别是成员函数总是自动传入this指针。

答案 3 :(得分:0)

简单地说,如果它被引用,静态函数为自己创建一组内存,并且用于通常不可更改的静态数据成员。但是,非静态函数为每个实例创建单独的内存集,并且适用于非静态和静态数据成员。如果你需要稳定的输出去静态,如果你需要替代去非静态。