Ваш код выглядит правильно, но я бы рекомендовал создать вектор векторов Node
объектов
Класс vector
управляет собственной памятью, поэтому вам не нужно беспокоиться о том, чтобы забыть о delete
что-либо.
Вам даже не нужно указывать вектор векторов из Node
указателей. Если вы скажете my_vector.push_back(my_node)
, он скопирует my_node
в память, выделенную для кучи вектора. Если вы возвращаете вектор из своей функции, узел идет с ним (он не теряется в конце функции, как объект, размещенный в стеке). Например:
// declare a vector of nodes on the stack
vector<node> nodes;
// declare a Node object on the stack
Node my_node(/*arguments*/);
// copy my_node (on the stack) into the vector's memory (on the heap)
nodes.push_back(my_node);
// (return 'nodes' from this function and store it somewhere)
Обратите внимание, что узел в nodes
отличается от объекта my_node
. Если вместо этого вы сделали my_node с new
, push_back()
скопирует указатель (а не сам объект), и объект в векторе будет тем же, который вы создали с помощью new
. Если вы сделаете это, у вас есть объект, и вы должны помнить, чтобы удалить его, когда вы закончите. Если вы позволите вектору владеть объектом (как в моем примере кода), он справится с этим за вас.