为什么样要用静态成员函数?内存当中的野指针多了会对电脑运行产生什么样样的影响
初学C++,刚学到静态成员函数,不太懂为什么要加入静态成员函数。
所以就想问问大神们,看能不能解释下。
在研究静态成员函数之前,我们先来考虑考虑为什么C++中会引入静态成员函数。
我们来看下面这个例子
class CStaticMember
{
public:
private:
static int m_nIntA;
};
我们定义①个CStaticMember类,里面包含①个私有的静态成员变量m_nIntA,如果外部想访问或者更改m_nIntA的值,那么根据C++语法的要求,我们必须提供①个成员函数来进行访问。如下我们提供①个公有的GetIntA函数来进行访问。
class CStaticMember
{
public:
int GetIntA()
{
return m_nIntA;
}
private:
static int m_nIntA;
};
我们知道在C++中调用类的成员函数,会传递①个this指针,将类的实例化对象的首地址传递给成员函数,函数操作会根据对象首地址计算其成员变量的地址,然后进行操作。然而静态成员变量并不保存在对象的内存布局中,而是保存在数据段中,因而没有必要用到this指针。所以需要①种独立于对象之外对对象静态成员变量的访问操作。在早期C++引入静态成员函数之前,你会看到下面这样奇怪的写法:
(( CStaticMember*)⓪)->GetIntA();
这样的写法就是为了避免了对象. GetIntA()的操作从而避免了对象的实例化操作,如下所示
编译器生成的代码是先将ecx清⓪,然后直接调用CStaticMember::GetIntA函数。这种写法的优点就在于不用对进行对象实例化操作从而节省了时间和空间。这种写法最早由贝尔实验室的成员Jonathan Shopiro提出,他本人也是引入静态成员函数的主要倡导者。
野指针如果能保证不去动的话,其实①点问题都没有。所以关键问题不再数量上,而在于你知不知道哪个指针不能动。\", \"extras\": \"\", \"created_time\": ①④④③⑦⓪⑦⑧①⑨ · \"type\": \"answer
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
