爲什麼在下面的代碼示例中分配緩衝區時將char *轉換爲char **,而 這裏發生了什麼?鑄造C++問題
first_ = *reinterpret_cast<char **>(first_);
//CODE SAMPLE
public:
char * Allocate()
{
if (!first_)
return 0;
char *result = first_;
first_ = *reinterpret_cast<char **>(first_); // WHY?
--available_;
return result;
}
private:
char *buffers_;
char *first_;
std::size_t available_;
std::size_t maxnum_;
std::size_t buffersize_;
//WHOLE CLASS IS HERE
class Chunk
{
public:
Chunk(std::size_t buffersize, std::size_t buffernum)
: buffers_(0),
first_(0),
available_(0),
maxnum_(0),
buffersize_(0)
{
assert(buffersize > sizeof(char *) && buffernum > 0);
std::size_t len = buffersize * buffernum;
buffers_ = new char[len];
first_ = buffers_;
available_ = buffernum;
maxnum_ = buffernum;
buffersize_ = buffersize;
char *begin = buffers_;
char *end = buffers_ + len - buffersize_;
*reinterpret_cast<char **>(end) = 0;
for (; begin < end; begin += buffersize_)
{
char **next = reinterpret_cast<char **>(begin);
*next = begin + buffersize_;
}
}
~Chunk()
{
delete [] buffers_;
}
char * Allocate()
{
if (!first_)
return 0;
char *result = first_;
first_ = *reinterpret_cast<char **>(first_);
--available_;
return result;
}
void Deallocate(char *buffer)
{
*reinterpret_cast<char **>(buffer) = first_;
first_ = buffer;
++available_;
}
bool IsFull() const
{
return available_ == 0;
}
// the buffer is one of this chunk
bool IsChunkBuffer(char *buffer) const
{
assert(buffer);
return buffer >= buffers_ && buffer < buffers_ + maxnum_ * buffersize_;
}
private:
char *buffers_;
char *first_;
std::size_t available_;
std::size_t maxnum_;
std::size_t buffersize_;
};
此代碼對我沒有意義(直到您發佈更多代碼)。你從哪裏得到它的? – Nawaz
你能顯示first_真的被分配的部分嗎?從顯示的代碼看來,它似乎毫無用處(除非first_隱藏某些列表,其中ptr到下一個存儲在first_的前4個字符中) –