From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3818 invoked by alias); 18 Oct 2011 18:39:20 -0000 Received: (qmail 3809 invoked by uid 22791); 18 Oct 2011 18:39:19 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from mail-wy0-f175.google.com (HELO mail-wy0-f175.google.com) (74.125.82.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 18 Oct 2011 18:39:04 +0000 Received: by wyg19 with SMTP id 19so1029493wyg.20 for ; Tue, 18 Oct 2011 11:39:03 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.229.30 with SMTP id g30mr1277165weq.51.1318963143142; Tue, 18 Oct 2011 11:39:03 -0700 (PDT) Received: by 10.216.36.78 with HTTP; Tue, 18 Oct 2011 11:39:03 -0700 (PDT) In-Reply-To: <20111018200320.d842f5352bbdccf961125857@starynkevitch.net> References: <20111018171201.361304028ab94f102f827bd2@starynkevitch.net> <20111018200320.d842f5352bbdccf961125857@starynkevitch.net> Date: Tue, 18 Oct 2011 19:42:00 -0000 Message-ID: Subject: Re: adding destroyable objects into Ggc From: Jonathan Wakely To: Basile Starynkevitch Cc: gcc@gcc.gnu.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org X-SW-Source: 2011-10/txt/msg00293.txt.bz2 On 18 October 2011 19:03, Basile Starynkevitch wrote: > On Tue, 18 Oct 2011 18:53:07 +0100 > Jonathan Wakely wrote: > >> On 18 October 2011 16:12, Basile Starynkevitch wrote: >> > >> > Of course, with C++, the destructor routine is really what C++ calls a= destructor, e.g >> > something like extern "C" void my_destructor_for_class_C (class C* p) >> > { delete (p) p; // call the placement version of operator delete, from= C++ library >> > header. } >> >> Why not just call the destructor? >> >> =A0 =A0p->~C() > > You are right. But I was also thinking of giving a C ABI to these destruc= tors. Yes, I understand that, I wasn't talking about the C interface. I assume you haven't tried to compile your suggested code, because 1) your destructor function doesn't match the ggc_destructor_t signature. 2) you can't call placement delete like that 3) the placement delete in is a no-op You probably want something like this: extern "C" void my_destructor_for_class_C (void* p) { static_cast(p)->~C(); }