Исходя из моего опыта работы с настольными (UNIX, Linux, Windows) приложениями, я думаю, что вы можете назначить любое значение указателю.Если вы не разыменовываете указатель, эти системы не вызывают странного поведения, когда вы присваиваете такие значения указателю.
В следующем примере показан один механизм, который я видел, когда дело доходит до сохранения указателей на диск и восстановленияуказатели с диска.
Давайте взглянем упрощенно на связи между гранями, ребрами и вершинами модели САПР.
struct Face;
struct Edge;
struct Vertex;
struct Face
{
std::vector<Edge*> edges;
};
struct Edge
{
std::vector<Face*> faces;
Vertex* start;
Vertex* end;
};
struct Vertex
{
std::vector<Edge*> edges;
double x;
double y;
double z;
};
и у вас будет грань в плоскости XY.
E3
V4 +--------+ V3
| |
E4 | F | E2
| |
+--------+
V1 E1 V2
Такое лицо может быть сохранено на диск в следующем формате:
0 Face 4 $1 $2 $3 $4
1 Edge 1 $0 $5 $6
2 Edge 1 $0 $6 $7
3 Edge 1 $0 $7 $8
4 Edge 1 $0 $8 $5
5 Vertex 2 $1 $4 0 0 0
6 Vertex 2 $2 $1 10 0 0
7 Vertex 2 $3 $2 10 10 0
8 Vertex 2 $4 $3 0 10 0
, где первое число указывает индекс в массиве объектов, в то время как поля, имеющие $
префикс - это указатель на элемент с этим индексом.
Когда эта информация читается с диска, существует два прохода, чтобы восстановить объекты в пригодное для использования состояние.При первом проходе индексы хранятся вместо указателей.Во втором проходе индексы конвертируются в указатели.На первом проходе числа [0
- 8
] сохраняются там, где ожидаются указатели.Только после второго прохода указатели будут указывать на соответствующие объекты.
Длинная история сортировки, переменным-членам указателя присваиваются значения, которые, очевидно, не являются допустимыми указателями, но механизм работает безупречно.
это было бы проблемой для других платформ, я не могу комментировать.У меня нет опыта, чтобы отступить.