C++中void型指针
问题由来:
PX_FORCE_INLINE void* operator new(size_t size, const char* handle, const char * filename, int line) { return getSampleAllocator()->allocate(size, handle, filename, line); }
在这里可以看到函数返回值是一个void*,也就是void型的指针。
那么void型指针是个什么东西呢?
void型指针所指的内存区域,可以存储任何类型的数据,也可以说是没有数据类型。
直到使用这一块内存的时候,才知道给里面装的是啥数据。
——————————我是你们的老朋友,分割线。————————————
void及void指针含义的深刻解析一文很清楚的说了void类型和void型指针的问题。
下面是个人总结:
- void类型表示无类型,从哲学上来说也可以看成是任意类型。
- 可以使用任意类型的指针为void型指针赋值,但是不能用void型指针为已知类型的指针赋值。所谓“白马是马,马非白马”。
- 函数的参数使用void型指针,表示可以传入任意类型的参数。(爽不?)
- void可以看成是一种抽象类型,想想virtual,虚函数、虚基类,他们都是抽象的,是虚的。所以不能实例化一个虚的东西,也就是说不能声明一个void型的变量(注意这里我说的是变量,不是指针)。可以想象成void类型是所有已知类型之上的一个抽象类型。
- 既然void类型是抽象的,那么就不能对它进行具体的算数运算,例如void * pvoid; pvoid++; pvoid +=2;都是invalid,指针的++操作是给当前分配的内存空间增大一个单元的空间,可是void类型你都不知道它要存啥,你当然不知道他一个单元要多大,所以就不能做算术运算。
- 暂留