В настоящее время я работаю над назначением класса, где мне нужно реализовать связанный с блокировкой список. Структура каждого из моих узлов, по существу:Кража битов из std :: shared_ptr
class Node {
std::shared_ptr<Node> next;
long long key;
}
мне нужно как-то встроить дополнительный бит данных в «следующий» указатель. Я не могу использовать дополнительное логическое поле, потому что «следующий» указатель нуждается в обновлении с помощью compare_exchange_strong(). Я также должен использовать std :: shared_ptr для его возможностей сбора мусора; выполнение мелиорации памяти на блокированной структуре данных выходит за рамки того, что мы изучили в ходе курса.
Если я использовал простой старый указатель, я мог бы использовать операторы манипуляции бит, чтобы «перевернуть» верхний бит указателя, но ясно, что это не сработает, потому что, как только я закручиваю бит, указатель указывает на неправильное расположение памяти, а когда оператор присваивания пытается получить доступ к блоку управления, это вызовет нарушение сегментации.
Может ли кто-нибудь дать представление о том, как я могу это сделать?
О, и для любопытных я использую g ++ - 4.8.2 в системе Linux.
Вы можете вставлять информацию в пользовательский делектор. – dyp
Знаете ли вы, где я мог бы найти пример чего-то подобного? –
@DyP Делектор за указатель на объект, а не на общий указатель, поэтому я думаю, что это совсем другое. –