[gecode-users] Best practice to use a shared_ptr in a gecode solver

Guido Tack tack at gecode.org
Tue Nov 4 04:09:19 CET 2014


Hi Gustavo,

did you register the brancher for disposal?  It's described in sect. 19.4 in MPG, have a look at the way home.notice() is called for the brancher in the example.

Cheers,
Guido

> On 4 Nov 2014, at 1:58 pm, Gustavo Gutierrez <gustavo.ggutierrez at gmail.com> wrote:
> 
> Dear Gecode users,
> 
> This is probably a naive question and very related to C++. However, it is quite related to gecode as well. In my use case I have a shared pointer to an object that contains all the information of a problem instance. As usual, the constructor is where the CSP is defined and that object is passed as an argument to it.
> 
> In addition, I implemented a brancher that also require some of the information pointed by the shared pointer.  Note that this infromation is not actually needed to construct the brancher but when computing a choice. I have tried several ways to make both the brancher and the shared_pointer happy with their respective requirements. However I have found myself in the following situation.
> 
> When I add the shared_pointer as an attribute to the brancher I get the shared pointer reference counter messed up. The reason is that the brancher does not actually have a destructor and hence the shared_pointer counter is never decremented and the owned pointer is never destructed at the end of the solver execution. I tried to explicitly call the destructor of the shared pointer in the dispose method of the brancher. However, it seems that the brancher gets copied more times than the dispose method is called.
> 
> Is there a way to integrate both approaches smoothly?. Probably I am overlooking something.
> 
> Regards,
> Gustavo
> 
> 
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users




More information about the users mailing list