Сохранить ресурс памяти, из которого был создан объект, для самого объекта, чтобы иметь возможность вызывать удаление как обычно? [closed]

Когда ресурс памяти (или распределитель) используется для создания объекта, при удалении необходимо помнить, каким ресурсом памяти он был создан.

Является ли хорошим шаблоном сохранять ресурс памяти в самом объекте и выполнять соответствующее удаление в операторе удаления класса? Следующий код демонстрирует идею:

#include <memory_resource>

using namespace std::pmr;

struct A
{
    A (memory_resource * memres_ = nullptr)
      : memres(memres_)
    {}
    memory_resource * memres;

    void operator delete(A * this_, std::destroying_delete_t)
    {
        if ( memory_resource * memres_ = this_->memres )
            polymorphic_allocator(memres_).delete_object(this_);
        else
            ::delete(this_);
    }
};

int main()
{
    A * aGlobal = new A;
    delete aGlobal;

    memory_resource * memres = get_default_resource();
    A * aPmr = polymorphic_allocator(memres).new_object<A>(memres);
    delete aPmr;
}

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *