gpt4 book ai didi

c++ - 在指向同一对象的两个指针上调用 delete

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:41 25 4
gpt4 key购买 nike

我在尝试编写几个事件处理程序类时遇到了问题。基本上,想法是为每个逻辑对象组创建一个事件处理程序类。在大多数情况下,事件发生在对象及其处理程序之间,但在某些情况下,事件也在处理程序对象之间发送。

我编写的代码将事件放置在堆栈上(堆栈,就像在用户创建的结构中;事件本身使用 new 分配)和 删除d 在他们的信息被阅读并采取行动之后。这给我带来了一些问题,因为在一种情况下,事件是沿着三个处理程序的链发送的。例如,HandlerA 发送一个new EventHandlerB,后者将它放在堆栈上并读取它,然后将它发送给HandlerC,它读取它并执行它需要执行的任何操作,之后它删除事件指针并将其设置为NULL。现在,我们返回到 HandlerB,它还想删除NULL 指向事件的指针。但是指针是一个局部变量,它最终删除了同一个地址两次,给出了一个异常。

你如何解决这个问题?您是否需要使用那些花哨的 auto_ptr 之一(在这里还是个早期学习者),还是我在这里遗漏了一些基本的东西?

最佳答案

<罢工>

<罢工>

I've written the code such that the events are placed on a stack and deleted after their information is read and acted upon.

这里有些困惑 - 堆栈上的对象应该 deleted。使用 new 创建的对象(在堆上)应该。

一般而言,您应该为堆上的对象定义明确的所有权策略。每个对象都应该有一个所有者,并且在任何时候都应该清楚谁是所有者。该所有者 - 并且只有它自己 - 应删除该对象。

您可能还想使用 boost::shared_ptr(它也可以用作 std::tr1::shared_ptr,具体取决于您的编译器)而不是 raw指针。这会记录对该对象的引用,并在引用计数降为 0 时删除它。

关于c++ - 在指向同一对象的两个指针上调用 delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3245518/

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