Odd Destructor Behavior

Márcio Martins via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Feb 7 14:07:57 PST 2016


On Sunday, 7 February 2016 at 21:49:24 UTC, Matt Elkins wrote:
> I've been experiencing some odd behavior, where it would appear 
> that a struct's destructor is being called before the object's 
> lifetime expires. More likely I am misunderstanding something 
> about the lifetime rules for structs. I haven't been able to 
> reproduce with a particularly minimal example, so I will try to 
> explain with my current code:
>
> [...]

The destructor you are seeing is from the assignment:

m_tileView = TileView(...);

This creates a temporary TileView, copies it to m_tileView, and 
then destroys it. I suppose you want to move it instead. You need 
to copy the handles from the temporary into the destination, and 
then clear them out from the temporary to prevent them from being 
released.

std.algorithm has a couple of move() overloads that might be 
useful here.


More information about the Digitalmars-d-learn mailing list