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

Check if pointer to custom class no longer exists

本文关键字:指针 是否 不再 存在 自定义 检查      更新时间:2023-10-16

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

 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

我该如何解决这个烂摊子?

你永远无法知道你指向的引用或指针是否无效(请参阅为什么我不需要检查引用是否无效/空?)。

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

你真的必须知道对象是否存在吗?阅读有关接收器设计模式的信息。它在Boost Asio中很常见。如果您使用的是指针,则必须记住删除等后为空指针... 试试smart_ptr的。

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

我最终保持整个线程繁忙,防止对象被删除,直到我完成它。我知道这是乡下人,但它省去了我不得不通过乡下人浏览整个代码的所有麻烦。