我有一个对象,它由另一个通过引用传递的对象构造。传递给构造函数的对象如下所示:
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
如何修复这个烂摊子?
答案 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)
我最终保持整个线程忙,阻止对象被删除,直到我完成它。我知道,这是一个乡下人,但它让我免于在整个代码中遇到麻烦。