struct constructors and destructors.

Danni Coy via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 20 02:09:42 PDT 2017


On Thu, Jul 20, 2017 at 12:19 AM, SrMordred via Digitalmars-d <
digitalmars-d at puremagic.com> wrote:

> On Wednesday, 19 July 2017 at 14:09:32 UTC, SrMordred wrote:
>
>> On Wednesday, 19 July 2017 at 09:09:40 UTC, Stefan Koch wrote:
>>
>>> On Wednesday, 19 July 2017 at 07:48:28 UTC, Danni Coy wrote:
>>>
>>>> Is there a reason that the following code
>>>>
>>>> struct Foo
>>>> {
>>>>     this (string name)
>>>>     { do_something(name); }
>>>>
>>>>     ~this()
>>>>     { undo_something(); }
>>>> }
>>>>
>>>> Foo foo = void;
>>>>
>>>> void open()
>>>> {
>>>>     foo = Foo("test"); // <- this line
>>>> }
>>>>
>>>> tries to OpAssign foo to itself then calls foo's destructor?
>>>>
>>>
>>> What happens is this.
>>>
>>> void open()
>>> {
>>>   foo = () {
>>>   Foo _tmp = Foo.__ctor("test");
>>>   return _tmp;
>>>   } ();
>>> }
>>>
>>
>> Hm, isnt that wrong?
>> If I destroy resources on the dtor, wouldn't it invalidate the resource
>> on the copy?
>> Also, C++ behaves differently
>>
>
> No Sorry, it behaves almost the same.
> just in D ctor and dtor are not called on declaration even if you drop " =
> void".
>

Is there a way to delay the initialisation of a struct?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20170720/b5cb31c5/attachment-0001.html>


More information about the Digitalmars-d mailing list