2013-06-26 79 views
0

我在我的C++程序中有一些共享指针。在我分配内存给指针之后(使用新的),我在程序中做了一些事情,然后我需要知道其他模块是否删除了这些指针。因为如果指针已被删除,那么我会得到访问冲突读取错误。有没有任何功能或任何方式来检查这一点?如何检查内存分配是否仍然有效?

+2

不需要。使用智能指针,即'std :: shared_ptr'和'std :: weak_ptr'。 – GManNickG

+0

告诉我们更多关于你在创建它之后对你的可怜的指针和分配的内存做什么:) – Antonio

+1

看看boost共享指针 - http://www.boost.org/doc/libs/1_53_0/libs/smart_ptr/ shared_ptr.htm#示例 – OldProgrammer

回答

3

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

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

但是,使用智能指针类将减轻管理动态内存的很多负担。不是传递原始指针,而是传递智能指针。这些智能指针(至少是shared_种类)是参考计数的。只要指针至少有一个引用仍然存在,则指向的对象将不是delete d。一旦最后一个参考被删除,对象自动为delete d。

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

查看the documentation了解更多信息。