= is always copying.

struct Vector2
{ float x, y; };

int main()
{
	int a = 2;
	int b = a; // a and b are different variable. (copy)
	b = 3; // a remains as 2

	Vector2 c = {2,3};
	Vector2 d = c;
	d.x = 5; // c.x is still 2

	Vector2* e = new Vector2();
	Vector2* f = e;
	f->x = 5; // e->x is also 5.
	// because it copies the pointer, not the pointed object.
}