December 31, 2004 Destructor called on null objects? | ||||
---|---|---|---|---|
| ||||
Is this standard behaviour? void main() { class Foo { this() { throw new Exception("Exception thrown in constructor"); } ~this() { printf("Destructor was called"); } } Foo foo = null; try { foo = new Foo(); foo ? printf("Foo is not null\n") : printf("Foo is null\n"); printf("After instantiantion"); } catch(Exception e) { printf("%.*s\n", e.toString()); // foo == null ? <x> : <y> <- causes 'Access Violation' foo ? printf("Foo is not null\n") : printf("Foo is null\n"); } } Output: Exception thrown in constructor Foo is null Destructor was called |
December 31, 2004 Re: Destructor called on null objects? | ||||
---|---|---|---|---|
| ||||
Posted in reply to ilitirit | People need to be forced to untabify all code they post! > // foo == null ? <x> : <y> <- causes 'Access Violation' needs to be ' foo is null' , or 'foo === null'. This was a gotcha for me at first as well, === is testing identity and == is testing equality. Charlie "ilitirit" <ilitirit_member@pathlink.com> wrote in message news:cr30fo$2kbi$1@digitaldaemon.com... > Is this standard behaviour? > > void main() > { > class Foo > { > this() > { > throw new Exception("Exception thrown in constructor"); > } > ~this() > { > printf("Destructor was called"); > } > } > > Foo foo = null; > > try > { > foo = new Foo(); > foo ? printf("Foo is not null\n") : printf("Foo is null\n"); > printf("After instantiantion"); > } > catch(Exception e) > { > printf("%.*s\n", e.toString()); > // foo == null ? <x> : <y> <- causes 'Access Violation' > foo ? printf("Foo is not null\n") : printf("Foo is null\n"); > } > } > > Output: > Exception thrown in constructor > Foo is null > Destructor was called > > |
Copyright © 1999-2021 by the D Language Foundation