Thread overview |
---|
September 07, 2008 [Issue 2341] New: Double destruction without intervening copy | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=2341 Summary: Double destruction without intervening copy Product: D Version: unspecified Platform: PC OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: andrei@metalanguage.com import std.stdio; struct A { int id; this(int x) { id = x; writeln("Created object from scratch: ", x); } this(this) { writeln("Copying object: ", id); } ~this() { writeln("Destroying object: ", id); } } struct B { A member; } B foo() { A a = A(45); return B(a); } void main() { auto b = foo; } The code above prints: Created object from scratch: 45 Destroying object: 45 Destroying object: 45 Obviously there should be an intervening copy, otherwise the same state gets destructed twice. The correct output should be: Created object from scratch: 45 Destroying object: 45 Copying object: 45 Destroying object: 45 -- |
September 08, 2008 [Issue 2341] Double destruction without intervening copy | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2341 ------- Comment #1 from brunodomedeiros+bugz@gmail.com 2008-09-08 09:03 ------- Shouldn't the correct output be: Created object from scratch: 45 Copying object: 45 Destroying object: 45 Destroying object: 45 ? After all, the postblit in the "B(a)" expression must run before foo's scope ends and "a" is destroyed, right? -- |
September 08, 2008 [Issue 2341] Double destruction without intervening copy | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2341 ------- Comment #2 from andrei@metalanguage.com 2008-09-08 09:45 ------- (In reply to comment #1) > Shouldn't the correct output be: > > Created object from scratch: 45 > Copying object: 45 > Destroying object: 45 > Destroying object: 45 > > ? > After all, the postblit in the "B(a)" expression must run before foo's scope > ends and "a" is destroyed, right? > Correct, thank you. -- |
October 21, 2008 [Issue 2341] Double destruction without intervening copy | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/issues/show_bug.cgi?id=2341 bugzilla@digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED ------- Comment #3 from bugzilla@digitalmars.com 2008-10-20 22:23 ------- Fixed dmd 2.020 -- |
Copyright © 1999-2021 by the D Language Foundation