Я пытаюсь предоставить get_deleter()
для моего шаблона класса распределителя без блокировок (код: здесь). Удалитель - это что-то вроде
template <typename T>
struct deleter {
allocator<T>& alloc;
void operator()(T* p) const noexcept {
p->~T();
alloc.deallocate(p);
}
};
Обратите внимание, что alloc
не должно быть const
, поскольку deallocate()
не const
, что соответствует std::allocator::deallocate()
. Теперь я не уверен, должен ли мой allocator::get_deleter()
быть const
. Дилемма заключается в следующем:
1. Обоснование использования const
: сам метод не изменяет *this
и является потокобезопасным (также см. Означает ли const потокобезопасность в C ++ 11?).
2. Обоснование того, что const
: метод возвращает deleter
, который можно использовать для изменения *this
. Также избегает const_cast()
, что необходимо, если метод const
.
Любое предложение или идея? Лично я за const
.
const
, если бы пометить его какconst
, это означало бы, что я могу удалить объект const без предупреждения. Не похоже на то, что я хочу разрешить. Может предоставить и то, и другое? - person spectras   schedule 13.03.2018const
? Однакоoperator delete()
не принимает указательconst
. Какая дилемма :( - person Lingxi   schedule 13.03.2018const
не может быть восстановлена.deleter
делает только эти две вещи: уничтожает и освобождает. - person Lingxi   schedule 13.03.2018