¿Cómo llamar a una función de C ++ no administrada con un std :: vector como parámetro de C #?

Tengo un front-end de C # y un backend de C ++ por razones de rendimiento. Ahora me gustaría llamar a una función C ++ como por ejemplo:

void findNeighbors(Point p, std::vector<Point> &neighbors, double maxDist);

Lo que me gustaría tener es una función de contenedor C # como:

List<Point> FindNeigbors(Point p, double maxDist);

Podría pasar una matriz plana como Point [] a la dll de C ++ no administrada, pero el problema es que no sé cuánta memoria asignar, porque no sé la cantidad de elementos que devolverá la función ...

¿Hay una manera elegante de manejar esto sin tener problemas con las pérdidas de memoria?

¡Gracias por tu ayuda!

Benjamín

Respuestas a la pregunta(4)

Su respuesta a la pregunta