Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #112725

Re: Patterns for C code with code generation (new ,delete ,destroy , { }, dismiss )

From Ben Bacarisse <ben.usenet@bsb.me.uk>
Newsgroups comp.lang.c
Subject Re: Patterns for C code with code generation (new ,delete ,destroy , { }, dismiss )
Date 2017-06-20 20:09 +0100
Organization A noiseless patient Spider
Message-ID <87zid2a32f.fsf@bsb.me.uk> (permalink)
References <e2fa453b-5161-4cd1-a96a-2246eba1e4fc@googlegroups.com> <f43b07dc-5164-45a8-87c5-074f098adabb@googlegroups.com>

Show all headers | View raw


Thiago Adams <thiago.adams@gmail.com> writes:

> On Tuesday, June 20, 2017 at 3:02:51 PM UTC-3, Thiago Adams wrote:
>
> [...]
>
>> '^' works like a pointer:
>> But, when generating destroy tells the generator that 
>> Y_Delete(p->pY) must be called.
>> 
>
> [...]
>
>> 
>> int main()
>> {
>>   Person ^ person = {};
>> } //ok delete person called (if null no effect)
>
>
>
> To create something like C++ smart pointers.
>
> typedef struct 
> {
>   int counter = 1;
> } RefCounted;
>
>
> void operator delete (RefCounted* p)
> {
>   if (p)
>   {
>     p->counter--;
>     if (p->counter == 0)
>     {
>      destroy p;
>     }
>   }
> }

I don't see how this is like C++'s special pointer templates.  They are
parameterised types and these have no type parameter.

> int main()
> {
>   RefCounted^ p = new RefCounted;
>   RefCounted^ p2 = NULL;
>
>   p2 = addref(p); //increments p->count

Shouldn't that be automatic since you've gone to the trouble of having a
new type syntax?  A missing addref and it all goes wrong.

Also, assignment should call delete on the pointer assigned to, should
it not?  After all it's losing reference.

> }//delete p and delete p2 are called

-- 
Ben.

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Patterns for C code with code generation (new ,delete ,destroy , { }, dismiss ) Thiago Adams <thiago.adams@gmail.com> - 2017-06-20 11:02 -0700
  Re: Patterns for C code with code generation (new ,delete ,destroy , { }, dismiss ) Thiago Adams <thiago.adams@gmail.com> - 2017-06-20 11:13 -0700
    Re: Patterns for C code with code generation (new ,delete ,destroy , { }, dismiss ) Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-20 20:09 +0100
      Re: Patterns for C code with code generation (new ,delete ,destroy , { }, dismiss ) Thiago Adams <thiago.adams@gmail.com> - 2017-06-20 13:08 -0700
        Re: Patterns for C code with code generation (new ,delete ,destroy , { }, dismiss ) Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-06-20 22:56 +0100
          Re: Patterns for C code with code generation (new ,delete ,destroy , { }, dismiss ) Thiago Adams <thiago.adams@gmail.com> - 2017-06-21 04:44 -0700
    Re: Patterns for C code with code generation (new ,delete ,destroy , { }, dismiss ) scott@slp53.sl.home (Scott Lurndal) - 2017-06-20 20:20 +0000
      Re: Patterns for C code with code generation (new ,delete ,destroy , { }, dismiss ) Thiago Adams <thiago.adams@gmail.com> - 2017-06-20 14:02 -0700
  Re: Patterns for C code with code generation (new ,delete ,destroy , { }, dismiss ) GOTHIER Nathan <nathan.gothier@gmail.com> - 2017-06-21 05:33 +0200
    Re: Patterns for C code with code generation (new ,delete ,destroy , { }, dismiss ) Thiago Adams <thiago.adams@gmail.com> - 2017-06-21 04:29 -0700
  Re: Patterns for C code with code generation (new ,delete ,destroy , { }, dismiss ) Thiago Adams <thiago.adams@gmail.com> - 2017-07-08 11:15 -0700

csiph-web