У меня есть структура (State - чистый виртуальный абстрактный класс):
using GraphColorGraph = boost::adjacency_list<boost::listS, boost::setS, boost::undirectedS,
boost::property<boost::vertex_index_t, size_t>>;
using GraphColorEdge = boost::graph_traits<GraphColorGraph>::edge_descriptor;
using GraphColorVertex = boost::graph_traits<GraphColorGraph>::vertex_descriptor;
class GraphColor : public State<ZykovMove> {
private:
GraphColorGraph graph;
public:
GraphColor() = default;
explicit GraphColor(const GraphColorGraph &graph) : graph(graph) {}
/*GraphColor(const GraphColor &other): State(other) {
boost::copy_graph(other.graph, this->graph);
}
GraphColor &operator=(const GraphColor &other) {
boost::copy_graph(other.graph, this->graph);
return *this;
}*/
}
Проблема, у меня есть функция, которая предназначена для многократного вызова (много раз!):
std::pair<GraphColor, Vertex> expand(const Vertex ¬_important, const GraphColor& root , Graph ¬_important) const {
// ... code
auto copy_root = root; // infinite loop if copy contructors enabled
return make_pair(copy_root, foo) // seg fault if the copy constructors not enabled.
}
Возможно, в коде скрыто поведение с неопределенным поведением, потому что, когда происходит второй вызов этой функции, копия вызывает бесконечное l oop. но если отключить копирование контуров в GraphColor
, то нет проблем с копированием GraphColor
, но есть проблема в make_pair (), которая выдает segfault, вызванную InvalidRead (valgrind). В двух звонках root
не меняется.