检查指向自定义类的指针是否不再存在

时间:2012-05-28 16:16:56

标签: c++ winapi

我有一个对象,它由另一个通过引用传递的对象构造。传递给构造函数的对象如下所示:

 HTTPServerResponse::HTTPServerResponse(Poco::Net::HTTPServerResponse &response)

我的包装类(HTTPServerResponse)在某些时候会破坏response,但它也不会破坏它自己。实际上有多个(外部)原因可能导致response被破坏,甚至在我的课堂之外。

我想要的是在调用response上的任何其他方法之前检查它的存在。

我试过了:

if(!response) {...

哪个产生了error C2675: unary '!' : 'Poco::Net::HTTPServerResponse' does not define this operator or a conversion to a type acceptable to the predefined operator;当然,我也尝试过:

if(response) {...

error C2451: conditional expression of type 'Poco::Net::HTTPServerResponse' is illegal; No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

也失败了

如何修复这个烂摊子?

3 个答案:

答案 0 :(得分:2)

您永远无法知道您指向的引用或指针是否无效(请参阅Why don't I need to check if references are invalid/null?)。

您必须小心(并清楚)关于谁拥有引用/指针以及谁应该删除它。为了帮助您拥有所有权,您可以使用std :: unique_ptr或std :: shared_ptr(在C ++ 0x中,否则使用boost版本。)

答案 1 :(得分:0)

你真的必须知道对象是否存在?了解Sink Design模式。它常用于Boost Asio。如果你正在使用指针,你必须记住在删除等之后空指针...尝试使用smart_ptr。

对我来说很难想象为什么你需要检查指针是否仍然存在。您的代码中存在设计问题。

答案 2 :(得分:0)

我最终保持整个线程忙,阻止对象被删除,直到我完成它。我知道,这是一个乡下人,但它让我免于在整个代码中遇到麻烦。