Как ограничить доступ к классам, чтобы полный доступ имели только распределители? ⇐ 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

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