Как ограничить доступ к классам, чтобы полный доступ имели только распределители?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как ограничить доступ к классам, чтобы полный доступ имели только распределители?

Сообщение Anonymous »

У меня есть класс cpp, который должен запрещать уничтожение, кроме как с помощью назначенного статического метода Destroy. Однако я хочу сделать его шаблоном, чтобы можно было использовать собственный распределитель. По сути, я хочу вот это:

Код: Выделить всё

template 
class Manager
{
public:
using AllocatorType = Allocator;
using AllocatorTraits = std::allocator_traits;

friend AllocatorTraits;

static void destroy(AllocatorType& alloc, Manager* target) noexcept {
AllocatorTraits::destroy(alloc, target);
AllocatorTraits::deallocate(alloc, target, 1);
}

private:
~Manager() = default;
};
Проблема в том, что деструктор является частным и хотя std::allocator_traits является другом, он вызывает std::destroy_at, что не является , следовательно, не удалось скомпилировать. Я определенно хочу, чтобы деструктор был закрытым, потому что я хочу четко указать, что этот класс никогда и ни при каких обстоятельствах не должен быть уничтожен другими способами, кроме уничтожения. С другой стороны, поддержка пользовательских распределителей имеет первостепенное значение. Есть ли способ совместить эти две потребности?
В более общем плане я хочу ограничить прямой доступ для всех, кроме Allocator, который должен иметь полный доступ, включая возможность предоставить доступ к нему кому-то другому (у кого его вообще может не быть). Существует ли для этого установленный шаблон?
РЕДАКТИРОВАТЬ:
Уничтожение выполняется с помощью статической функции, а не с помощью деструктора, поскольку объект не может освободить используемую память. для себя в своем деструкторе.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ull-access
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»