[Issue 15661] New: Destructor called while object still alive
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Mon Feb 8 16:19:12 PST 2016
https://issues.dlang.org/show_bug.cgi?id=15661
Issue ID: 15661
Summary: Destructor called while object still alive
Product: D
Version: D2
Hardware: x86_64
OS: Windows
Status: NEW
Severity: major
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: matt.elkins at gmail.com
In the code below the TileView destructor is called twice (see the output at
the bottom). The first call of the destructor appears to occur while the
TileView object is still alive. The expected output (also listed at the bottom)
occurs if any of a number of changes are made to the code, including but
probably not limited to:
* Creating the TextureHandles directly rather than calling create()
* Using only one argument to TileView's constructor
* Removing TextureHandle's empty destructor
This is on DMD 2.070 32-bit, running on 64-bit Windows 7.
[code]
import std.stdio;
struct TextureHandle
{
~this() {}
}
TextureHandle create() {return TextureHandle();}
struct TileView
{
@disable this();
@disable this(this);
this(TextureHandle a, TextureHandle b) {}
~this() {writeln("HERE2");}
}
struct View
{
this(int)
{
writeln("HERE1a");
m_tileView = TileView(create(), create());
writeln("HERE1b");
}
private TileView m_tileView;
}
unittest
{
auto v = View(5);
}
[/code]
[output]
HERE1a
HERE2
HERE1b
HERE2
[/output]
[expected_output]
HERE1a
HERE1b
HERE2
[/expected_output]
--
More information about the Digitalmars-d-bugs
mailing list