<<深度探索C++对象模型>>中的一个问题

OOPhaisky 2006-05-29 06:44:28
<<深度探索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并不知道要释放多少内存啊??

望看过此书的朋友给解答以下,先谢谢了。
...全文
157 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjzhaoxiao 2006-05-31
  • 打赏
  • 举报
回复
http://www.china-askpro.com/msg31/qa73.shtml
bjzhaoxiao 2006-05-31
  • 打赏
  • 举报
回复
http://dev.csdn.net/article/38/38532.shtm
bjzhaoxiao 2006-05-31
  • 打赏
  • 举报
回复
应该是delete [] ptr_array;
herman~~ 2006-05-29
  • 打赏
  • 举报
回复
关注
mul 2006-05-29
  • 打赏
  • 举报
回复
1.是
2.应该是
3.这段代码应该是类似伪代码,其实这里array_sz完全是知道的,所以删除ptr_array是没有问题的。这段代码只是描述这个过程而已,不必太较真。

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧