一个对非静态成员函数及指针的试验(请高手分析原理)

huche huche 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include "iostream.h"

class CTest
{
public:
CTest(){m_nTest = 5;};
~CTest(){};
void Func(void)
{ cout << "Func of class CTest" << endl;
cout << m_nTest << endl;
}
private:
int m_nTest;
};

void Test(void)
{
CTest *p;
{
CTest test;
p = &test;
}
p->Func(); // 能够正常输出,内存竟然没有释放?
}

void Test2(CTest **p)
{
CTest test;
*p = &test;
}

void main()
{
Test();

CTest *p;
Test2(&p);
p->Func(); // 函数能够正常执行,只是m_Test输出不对,说明m_nTest被释放

CTest *p2;
p2->Func(); // 函数能够被调用,只是访问m_nTest报访问内存错误.
}

// 在我机器上,程序执行结果为
// Func of class CTest
// 5
// Func of class CTest
// 4198688
// Func of class CTest
// "弹内存访问错误框"

// 上述表明调用类的成员函数并不需要初始化该类的对象,条件是不需要访问该类的成员变量。
// void CTest::Func(void) 被编译为 void Func(const CTest *this);

// 但是其他的我就无法解释了,请大家帮忙分析分析。
...全文

相关推荐

通过函数指针调用C++非静态成员函数

通过函数指针调用C++非静态成员函数通过函数指针调用C++非静态成员函数

icoding

C++静态成员函数不能调用非静态成员变量(详解)

下面小编就为大家带来一篇C++静态成员函数不能调用非静态成员变量(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

weixin_38656395

C++静态成员函数访问非静态成员的几种方法

大家都知道C++中类的成员函数默认都提供了this指针,在非静态成员函数中当你调用函数的时候,编译器都会“自动”帮你把这个this指针加到函数形参里去。当然在C++灵活性下面,类还具备了静态成员和静态函数,即 class A { public: static void test() { m_staticA += 1; } private: static int m_staticA; int m_a };   此时你的test函数只能去访问m_staticA成员,而不能去访问m_a。同学可能会问,这算什么问题?问题都是在应用场景中才能体现的,我一开始也是不以为意,直到我遇

weixin_38626179

C++中静态成员函数访问非静态成员的实例

C++中静态成员函数访问非静态成员的实例 实现代码: #include /* 静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据,不能访问非静态数据成员,但静态成员函数或静态数据成员可由任意访问许可的函数访问。原因是:当前对象的地址(this)是被隐含地传递到被调用的函数的。但一个静态成员函数没有this指针,所以它无法访问非静态的成员函数。 */ class a { public: static void FunctionA()//静态成员函数没有隐含的this自变量 { //menber = 1;//error C2597:对非静态成

weixin_38520046

关于C++静态成员函数访问非静态成员变量的问题

静态成员函数不能访问非静态成员,这是因为静态函数属于类而不是属于整个对象,静态函数中的 member可能都没有分配内存。静态成员函数没有隐含的this自变量。所以,它就无法访问自己类的非静态成员

weixin_38725015
评论 10
收藏 已收藏
分享
返回顶部
huche
C++ 语言 65,214 成员 250,514 内容