<<深度探索C++对象模型>>中的一个问题
<<深度探索C++对象模型>>261页的PV __vec_new函数中的一段:
// 把数组元素数目放到cache中
int status = __insert_new_array( ptr_array, elem_count );
if (status == -1) {
// 在exception Handling之下将丢出exception
// 将丢出exception bad_alloc
if ( alloc )
delete ptr_array;
return 0;
}
有三个问题:
1.“把数组元素数目放到cache中”,这里说的“cache”是不是前面提到的“cookie”?
2. __insert_new_array( ptr_array, elem_count )返回-1意味着什么?是不是意味着“把elem_count放到cookie中失败”?
3.如果__insert_new_array( ptr_array, elem_count )返回-1的确意味着“把elem_count放到cookie中失败”,那么我们来看看当status==-1时执行的操作:如果"if (alloc)"成立(由前面的程序可知这意味着ptr_array是用new分配的数组),则执行delete ptr_array释放空间。但是这里存在一个严重的逻辑问题:既然“把elem_count放到cookie中失败”,那么在分配的内存区块前面(即ptr_array前面)的cookie里面并没有包含区块的大小,所以怎么能delete呢?delete并不知道要释放多少内存啊??
望看过此书的朋友给解答以下,先谢谢了。