Я изменил этот исходный код:
GeomAPI_ExtremaCurveCurve ecc(
BRep_Tool::Curve(wd->Edge(i + 1), u11, u12),
BRep_Tool::Curve(wd->Edge(j + 1), u21, u22)
);
на этот:
static Handle(Geom_Curve) c0 = BRep_Tool::Curve(wd->Edge(i + 1), u11, u12);
static Handle(Geom_Curve) c1 = BRep_Tool::Curve(wd->Edge(j + 1), u21, u22);
GeomAPI_ExtremaCurveCurve ecc(c0, c1);
И это исправило. Но я все еще немного озадачен, почему. Вот что делает do c для объекта GeomAPI_ExtremaCurveCurve:
GeomAPI_ExtremaCurveCurve (const Handle< Geom_Curve > &C1, const Handle< Geom_Curve > &C2)
Я пока не самый лучший с указателями, но похоже, что аргументы требуют неизменного указателя, но данные, на которые указывает указатель, могут измениться ?
Тогда метод BRep_Tool :: Curve:
static Handle< Geom_Curve > Curve (const TopoDS_Edge &E, Standard_Real &First, Standard_Real &Last)
Теперь, когда я программирую время от времени и на разных языках, спецификатор stati c в C ++ сбивает с толку, но здесь он имеет имеет отношение к связыванию и продолжительности, cppref:
static - static or thread storage duration and internal linkage.
Я должен добавить, что эта функция является частью многопоточного приложения, а stati c и thread_local в некоторых отношениях взаимозаменяемы в отношении хранения потоков.
Кто-нибудь может пролить свет на то, почему это исправление работает?
спасибо, S