In C++ parlance, std::vector requires that the object it stores are copyable. std::vector expects to be able to copy objects as it reallocates or if existing objects are added to it.
Im basically forcing the class to work inside vectors. (that Im assuming to require a copy ctor)
So yes, you'll need to ensure you are correctly handling the rule of three in order to use it with std::vector.
C++ is a value oriented language by default. This means that unless you take care, C++ is going to create copies of things. In addition, as you found out here, C++ is going to generate copy constructors (and assignment operators) where possible to enable this behaviour.
Yeah, but the issue is knowing when you going to need it...
As a result, you'll almost always need to think about whether you want to allow copying your classes. For simple classes like a Vector3, copying is perfectly reasonable behaviour. For "large" objects (either with lots of members, or where the members are large dynamic allocations) you probably want to be very careful about when you actually copy them. For instance, having a noncopyable implementation with an explicit member function to copy where really necessary. You should note that polymorphic objects also need a lot of care if you really need them to be copyable.