我的c ++程序中有一些共享指针。在我为指针分配内存(使用new)后,我在程序中执行了一些操作,然后我需要知道是否有其他模块删除了这些指针。因为如果指针已被删除,那么我将获得访问冲突读取错误。是否有任何功能或任何方法来检查这个?
答案 0 :(得分:3)
我想当你说“共享指针”时,你并不是指std::shared_ptr
或boost:shared_ptr
这样的实际智能指针类,而只是一个从函数传递给函数的原始指针。 / p>
没有可靠,安全和跨平台的方法来确定原始指针的有效性。
但是,使用智能指针类可以减轻管理动态内存的大部分负担。你传递智能指针,而不是传递原始指针。这些智能指针(至少是shared_
种类)是引用计数的。只要对指针的至少一个引用仍然存在,指向的对象将不是delete
d。删除最后一个引用后,对象将自动delete
d。
上面提到的smart_ptr
对受控对象有一个所谓的“强引用”。还有智能指针,它保持对受控对象的弱引用。这些弱指针不会阻止对象被删除,并且可以在使用受控对象之前检查其有效性。
请查看the documentation了解详情。