如何确定是否已取消分配C++对象?

Mic*_*ray 5 c++

我有一个前面的问题已经回答,其中我描述了当我尝试访问已被第三方函数释放的对象时捕获异常的困难.该函数有时会执行并且有时不会释放该对象.

为了避免必须使用try/catch块来捕获前一个问题中描述的SEH异常,我需要能够判断对象是否已被释放.

如何确定C++对象是否已被释放或仍然是有效指针?

Adr*_*ore 12

如果仍然分配了对象,则无法通过查看内存位置来轻松判断.可能会有一些黑魔法技巧,但更清洁的方法是在对象的析构函数中构建一个回调机制.


sbi*_*sbi 6

我想你问的是错误的问题.问题应该是:

为什么我觉得我需要查看一些地址才能找出指向那里的指针是指一个对象还是删除了一个ex-object后留下的垃圾?

老实说,你不应该处于那种境地.如果删除了一个对象,为什么还有一个指向其前地址的指针?理想情况下,指针应该超出范围.如果您的代码中无法实现,则应将其设置为NULL.

  • 我会修改你的陈述......我不应该担任这个职位.不幸的是,这是我第三方代码所提出的立场.有时它会释放它,有时则不会. (2认同)
  • 在编写程序的上下文中这可能是一个错误的问题,但在编写测试单元的上下文中,您想要找出指针是否实际被删除,这是一个正确的问题. (2认同)