問題由來:
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類型你都不知道它要存啥,你當然不知道他一個單元要多大,所以就不能做算術運算。
- 暫留