template<class T>
Class Node
{
//irrelavant functs
};
class A
{
unordered_set<unique_ptr<Node<T>>, myHash<Node<T>>, myEqual<Node<T>>> nodes
shared_ptr<A> child;
void moveToChild()
{
for(auto it = nodes.begin(); it < nodes.end(); ++it) {
if (some_cond) {
child->nodes.emplace(std::move(*it));
}
}
}
};
У меня есть класс, который содержит кучу узлов в unordered_set и имеет указатель на себя, называемый child. Когда выполняются некоторые произвольные условия, этот класс должен перемещать некоторые (или все) его указатели на объекты узла в контейнер дочерних узлов. Но я не уверен, возможно ли это, так как ключи в unordered_sets являются константами.Перемещение умного указателя из одного unordered_set из другого
Я не против создания нового умного указателя, но я не могу позволить себе создавать новый узел каждый раз, когда я его перемещаю или удаляю из unordered_set. Если то, что я пытаюсь сделать, невозможно с помощью unique_ptrs, мне было интересно, возможно ли это с помощью shared_ptrs?
Я никогда не реализовал свои собственные распределители для контейнеров STL, поэтому не уверен, что я нахожусь на правильном пути, но я подумывал написать пользовательский распределитель для unordered_set, который принимает bool, если это правда, он удаляет объект objet if он ошибочен, он не освобождает указатель, но удаляет его из контейнера (опять же, не уверен, могу ли я сделать такое резкое изменение в поведении контейнера)
Итак, возможно ли каким-то образом перемещать умный указатель с одного неупорядоченного_set другому, не освобождая его?
Примечание: Пожалуйста, не обращайте внимания на ошибки опечаток и синтаксиса, это очень упрощенная версия моего кода.
Вам нужно будет удалить векторные элементы из родительского списка, если вы переводили на дочерний. – AndyG
@AndyG Я готов создать временный shared_ptr и стереть исходный файл из набора, но я не уверен, могу ли я сделать это, не освобождая точки интеллектуального указателя объекта. – duoren