Вот есть у меня структуры и глобальный массив:
struct Vec2
{
double x;
double y;
Vec2 operator+(Vec2 v) { return Vec2{ x + v.x, y + v.y }; }
Vec2 operator-(Vec2 v) { return Vec2{ x - v.x, y - v.y }; }
Vec2 operator/(double n) { return Vec2{ x / n, y / n }; }
Vec2 operator*(double n) { return Vec2{ x * n, y * n }; }
};
struct Circle
{
Vec2 position = Vec2{ 0.0, 0.0 };
double radius = 50.0;
COLORREF color = 0x0;
};
std::vector<Circle> circles;
Потом массив заполняется:
void GenerateCircles(int maxCount)
{
circles.clear();
RECT screenRect;
if (GetClientRect(hRenderingPanel, &screenRect))
{
for (int i = 0; i < maxCount; i++)
{
double tmpRadius = 40.0;
int xPosMax = screenRect.right - (int)tmpRadius;
int yPosMax = screenRect.bottom - (int)tmpRadius;
double xPos = (double)(rand() % (xPosMax - (int)tmpRadius)) + tmpRadius;
double yPos = (double)(rand() % (yPosMax - (int)tmpRadius)) + tmpRadius;
Vec2 tmpPosVec = Vec2{ xPos, yPos };
bool found = false;
for (size_t j = 0; j < circles.size(); j++)
{
double distance = VectorsDistance(circles[j].position, tmpPosVec);
if (distance <= circles[j].radius + tmpRadius)
{
found = true;
break;
}
}
if (!found)
{
Circle circle;
circle.position = tmpPosVec;
circle.radius = tmpRadius;
circle.color = RGB(rand() % 256, rand() % 256, rand() % 256);
circles.emplace_back(circle);
}
}
}
}
Мне однажды объясняли, что структуры могут содержать только примитивные типы, иначе данные могут теряться при передачи структуры как аргумента функции (если передавать саму структуру, а не указатель). У меня тут структура Circle
содержит в себе структуру Vec2
(а сами структуры примитивным типом не являются, вроде как).
Почему тогда данные в поле position
не теряются?