gpt4 book ai didi

c++ - 用 C++ 类模拟指针(包括删除)

转载 作者:行者123 更新时间:2023-11-30 01:46:21 26 4
gpt4 key购买 nike

在一个更大的 OpenSource 项目中,我们在某处遇到了悬空指针的问题。多态对象的实例通过指向它的指针传递并存储在几个地方。更具体地说:一件商品作为 Ware* 传递,它在某一点分配,然后注册在例如订购它的建筑物和当前持有它的承运人(以及更多地方)“所有者”是实际“拥有”它的地方(例如承运人)。因此,当承运人死亡时,他告诉商品通知订购它的建筑物它不再来了 --> 建筑物移除其指针。然后该商品被删除,任何实例都不应该有指向它的指针。

这在大多数情况下都有效,但似乎在某些情况下会失败并且实例仍然具有指针。我想检测这个。因此,我考虑将 Ware* 替换为类 WarePtr,它的作用类似于共享指针(引用计数)。因此,当 delete 被调用时,它可以检查 refCount==1 并断言它。

问题:对于大多数用途来说,它是一种直接替代品。因此,除了替换 Ware*->WarePtr 之外,语法也发生了变化。但我还需要更改我想避免的 delete ware 调用,这样就可以将其删除而无需将其改回。

是否可以创建一个类或重载,以便我实际上可以在定义为 WarePtr ware 的地方调用 delete ware
被调用函数需要检查断言并在包含的指针上调用 delete。重载 delete 运算符 只会让我拦截对删除 WarePtr*...

的调用

最佳答案

如果WarePtr具有到 Ware* 的非显式转换函数, 那么您可以调用 deleteWarePtr 上.

If the operand has a class type, the operand is converted to a pointer type by calling the above-mentioned conversion function, and the converted operand is used in place of the original operand for the remainder of this section.

([expr.delete]/2)

除此之外,操作数必须是一个指针。

关于c++ - 用 C++ 类模拟指针(包括删除),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33353135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com