检查指向自定义类的指针是否不再存在
Check if pointer to custom class no longer exists
我有一个对象,它用另一个通过引用传递的对象构造。传递给构造函数的对象如下所示:
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的。
对我来说,很难想象为什么你需要检查指针是否仍然存在。代码中存在设计问题。
我最终保持整个线程繁忙,防止对象被删除,直到我完成它。我知道这是乡下人,但它省去了我不得不通过乡下人浏览整个代码的所有麻烦。
- 新分配指向函数的指针是否合法?
- 在函数结束后使用指向变量的指针是否安全?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 经过最后一个数组元素末尾的指针是否应该等于超过整个数组末尾的指针?
- 传递给放置 new 的指针是否是指向其对象表示形式的非 UB 指针?
- 'this'指针是否可以在 c++ 标头声明中使用?
- C++ 在向量中使用指针是否可能导致指针悬空?
- 唯一指针是否在堆或堆栈上分配内存?
- 将基本实例指针强制转换为派生实例指针是否合法?(实例不是派生实例)
- 当向量增长时,指向向量元素的C++指针是否无效
- 如何判断指针是否是指向数组的指针
- 在类方法中使用 "this" 指针是否是一种好的做法?
- 如何知道指针是否已在其他地方释放
- 结构成员指针是否自动初始化为零?
- 为静态类创建指向对象的指针是否合法?
- 新的自动关键字指针是否会自行删除?
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 检查指针是否指向矢量元素
- 如何创建一个带锁的指针数组并检查指针是否空闲?
- 在映射中插入更多元素后,指向 QMap 中元素的指针是否仍然有效?