嵌入式指针 可以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; //8
TestEP::obj* ptemp; //定义一个指针
ptemp = (TestEP::obj*)&mytest; //把对象mytest首地址给了这个指针ptemp,这个指针ptemp指向对象mytest首地址;
cout << sizeof(ptemp->next) << endl; //4
cout << sizeof(TestEP::obj) << endl; //4
ptemp->next = nullptr;
return 1;
}