嵌入式指针 可以union改struct 内存分配后 next指针就没用了 直接作为数据空间比较省内存 因为对指针指向的内存存储的时候 编译器是不管你是什么类型的 ,这里有道练习题可以对指针的概念稍微理解一下:
#include <iostream>
using std::cout;
using std::endl;
class A
{
public:int j = 5;int i = 1;void exec() { i = 2; }
};
class B
{
public:int i = 3;int j = 6;void exec() { i = 4; }
} ;
int main(){A a;B *bp = (B *)&a;B b = *bp;cout<<a.i << bp->i << b.i<<endl;bp->exec();cout<<a.i <<bp->i << b.i<<endl ;b.exec();cout<<a.i << bp->i << b.i<<endl ;
}
由于嵌入式指针节省内存的特点 几乎所有的内存池都会使用
内存池一般不是为了提高效率而是为了减少cookie,设想一下节省100万个指针的存储会节省多少空间。
#include<iostream>
using namespace std;
class TestEP
{
public:int m_i;int m_j;public:struct obj //结构 //定义一个类型,不放在外部,污染全局变量{//成员,是个指针struct obj* next; //这个next就是个嵌入式指针//自己是一个obj结构对象,那么把自己这个对象的next指针指向 另外一个obj结构对象,最终,把多个自己这种类型的对象通过链串起来;};
};int main()
{TestEP mytest;cout << sizeof(mytest) << endl; //8TestEP::obj* ptemp; //定义一个指针ptemp = (TestEP::obj*)&mytest; //把对象mytest首地址给了这个指针ptemp,这个指针ptemp指向对象mytest首地址;cout << sizeof(ptemp->next) << endl; //4cout << sizeof(TestEP::obj) << endl; //4ptemp->next = nullptr;return 1;
}