Kri*_*ato 5 c++ pointers new-operator delete-operator
我正在尝试编写几个事件处理程序类的问题.基本上,我们的想法是为每个逻辑对象组创建一个事件处理程序类.在大多数情况下,事件在对象及其处理程序之间,但在某些情况下,事件也在处理程序对象之间发送.
我已经编写了代码,使得事件被放置在堆栈上(堆栈在用户创建的结构中;事件本身是使用分配的new)和deleted,在读取信息并对其进行操作之后.这给了我一些问题,因为在一个案例中,事件是由三个处理程序链发送的.比方说,HandlerA发送一个new Eventto HandlerB,它将它放在堆栈上并将其读取,发送给它HandlerC,读取它并执行它需要执行的任何操作,之后它delete是Event指针并将其设置为NULL.现在,我们回到HandlerB并且,它也想要delete和NULL指向事件的指针.但是指针是局部变量,它最终会删除相同的地址两次,从而产生异常.
你怎么绕过这个?你需要使用其中一种花哨auto_ptr的东西(这里还是早期的学习者),还是我错过了一些基本的东西?
Pét*_*rök 10
我编写了代码,以便将事件放在堆栈上,并在读取信息并对其进行操作后删除.
这里有一些混乱 - 堆栈上的对象不应该是deleted.用new(在堆上)创建的对象应该.
通常,您应该为堆上的对象定义明确的所有权策略.每个对象应该有一个所有者,并且应该清楚所有者在任何时间点.那个拥有者 - 而且它本身 - delete就是对象.
您可能还想使用boost::shared_ptr(它可能也可用std::tr1::shared_ptr,取决于您的编译器)而不是原始指针.这将保留对对象delete的引用计数,并在ref计数降为0时对其进行计数.