C++之Class内存
同一类的不同对象,在调用相同的成员函数时,他们的入口地址是否相同?
是相同的因为他们都存在了代码区
什么样的机制来保证他们同时调用的时候不冲突,并且输出是各自的结果的?
类就相当于是个空盒子,组合了this指针,才有了灵魂。
用this指针来保证他们的数据数据不发送冲突,因为传入的是不同this指针,所以得到的是不同的变量
#ifndef BASECLASS_H #define BASECLASS_H class BaseClass { public: BaseClass(); static void staticFunc(); void funcNotUseMemberVar(); void funcUseMemberVar(); virtual void virtulalFunc(); public: int i; }; #endif // BASECLASS_H
#include "BaseClass.h" #include <iostream> using namespace std; BaseClass::BaseClass() : i(1000) { } void BaseClass::staticFunc() { cout << __FUNCTION__ <<endl; } void BaseClass::funcNotUseMemberVar() { cout << __FUNCTION__ <<endl; } void BaseClass::funcUseMemberVar() { cout << i << __FUNCTION__ <<endl; } void BaseClass::virtulalFunc() { cout << __FUNCTION__ <<endl; }
#include <QCoreApplication> #include "BaseClass.h" #include <iostream> using namespace std; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); BaseClass *pBaseObj = nullptr;//new BaseClass(); pBaseObj->funcNotUseMemberVar(); // pBaseObj->funcUseMemberVar(); // 崩溃 this 是空,调用this->成员变量,肯定就崩溃了 pBaseObj->staticFunc(); // pBaseObj->virtulalFunc(); // 崩溃 this 是空,虚函数表的调用肯定也崩溃 return a.exec(); }