std :: unique_ptr <> jako wskaźnik w strukturze opartej na węźle

Ponieważ większość ppl jak łamigłówki I, zacznę to pytanie od (złej pisowni :)), jak wprowadzenie,Uwaga że jeśli nie dbasz o to, możesz pominąć rozgrzewkę (pytanie JG) i przeczytać pytanie G, ponieważ jest to moje „prawdziwe pytanie SO”.

Podczas przeglądania próbek kodu dostarczonych przez potencjalnych nowych pracowników natknąłeś się na połączoną listę, której implementacja używa nowoczesnej funkcji C ++ 11, std :: unique_ptr <>.

template <typename T> 
struct Node { 
   T data; 
   std::unique_ptr<Node<T>> next; 
   Node () {} 
   Node(const T& data_): data(data_) {} 
   Node(Node& other) { std::static_assert(false,"OH NOES"); } 
   Node& operator= (const Node& other) { 
     std::static_assert(false,"OH NOES"); 
     return *new Node(); 
   } 
public: 
   void addNext(const T& t) { 
      next.reset(new Node<T>(t)); 
   }
};

template<typename T>
class FwdList
{
    std::unique_ptr<Node<T>> head;
public:
    void add(const T& t)
    {
        if (head == nullptr)
            head.reset( new Node<T>(t));
        else {
            Node<T>* curr_node = head.get();
            while (curr_node->next!=nullptr) {
                curr_node = curr_node->next.get();
            }
            curr_node->addNext(t);
        }
    }
    void clear() {
        head.reset(); 
    }
 };

Pytanie JG:

Za pomocą tego kodu określ (ignorując brakującą funkcjonalność) problem (y).

Pytanie G: (dodano 2. na podstawie odpowiedzi)
1

Czy istnieje sposób na rozwiązanie problemu (ów) wykrytych w części pytania JG bez użycia surowych wskaźników?

2.

Czy poprawka działa dla kontenerów, w których węzeł zawiera więcej niż jeden wskaźnik (na przykład drzewo binarne ma wskaźniki do lewego i prawego dziecka)

Odpowiedzi:
JG:

przepełnienie stosu :). Powód: rekurencja destruktorów unique_ptr <> wywołana przez funkcję .clear ().

SOL:

(???) Nie mam pojęcia, moje przeczucie jest nie, ale chciałbym skontaktować się z ekspertami.

Krótka historia: czy istnieje sposób na używanie inteligentnych wskaźników w strukturach opartych na węzłach i nie kończących się problemami z SO? Proszę nie mówić, że drzewa prawdopodobnie nie będą zbyt głębokie, lub coś w tym stylu, szukam ogólnego rozwiązania.

questionAnswers(1)

yourAnswerToTheQuestion