On December 5, 2019 2:03:58 PM GMT+01:00, "Martin Liška" <[email protected]> wrote:
>On 12/5/19 1:59 PM, Richard Biener wrote:
>> Isn't there ggc_alloc <T> for this? Also ggc_alloc_no_dtor<T> in
>case you
>> want to handle finalization yourself.
>
>No, if I see correctly it only calls Dtor:
But its odd to handle finalization but not construction here and not
finalization in your new wrapper.
That doesn't look like a good API. I see Honza approved the change but maybe
you can fix the actual issue without this new API for the moment.
Richard.
>template<typename T>
>inline T *
>ggc_alloc (ALONE_CXX_MEM_STAT_INFO)
>{
> if (need_finalization_p<T> ())
>return static_cast<T *> (ggc_internal_alloc (sizeof (T), finalize<T>,
>0, 1
> PASS_MEM_STAT));
> else
> return static_cast<T *> (ggc_internal_alloc (sizeof (T), NULL, 0, 1
> PASS_MEM_STAT));
>}
>
>...
>
>/* Allocate a chunk of memory of SIZE bytes. Its contents are
>undefined. */
>
>void *
>ggc_internal_alloc (size_t size, void (*f)(void *), size_t s, size_t n
> MEM_STAT_DECL)
>{
>...
>
>The function is generic, it does not know about type T. That's why it
>does not (and can't call) ctor.
>
>Martin