如何检查内存分配是否仍然有效?

时间:2013-06-26 20:22:04

标签: c++ stl

我的c ++程序中有一些共享指针。在我为指针分配内存(使用new)后,我在程序中执行了一些操作,然后我需要知道是否有其他模块删除了这些指针。因为如果指针已被删除,那么我将获得访问冲突读取错误。是否有任何功能或任何方法来检查这个?

1 个答案:

答案 0 :(得分:3)

我想当你说“共享指针”时,你并不是指std::shared_ptrboost:shared_ptr这样的实际智能指针类,而只是一个从函数传递给函数的原始指针。 / p>

没有可靠,安全和跨平台的方法来确定原始指针的有效性。

但是,使用智能指针类可以减轻管理动态内存的大部分负担。你传递智能指针,而不是传递原始指针。这些智能指针(至少是shared_种类)是引用计数的。只要对指针的至少一个引用仍然存在,指向的对象将不是delete d。删除最后一个引用后,对象将自动delete d。

上面提到的smart_ptr对受控对象有一个所谓的“强引用”。还有智能指针,它保持对受控对象的弱引用。这些弱指针不会阻止对象被删除,并且可以在使用受控对象之前检查其有效性。

请查看the documentation了解详情。