So, let's assume I have a custom vector type:
template <class D, size_t N>
class Vector {
public:
Vector(const D* arrayPtr)
{
memcpy(m_array.data(), arrayPtr, sizeof(D)*N);
}
... operators, methods, etc ...
std::array<D, N> m_array;
};
So, I instantiate a new Vector<double, 4> pointer. However, sometimes I want to treat it as a Vector<double, 3>. Is it safe to do the following?
Vector4* myVec4 = new Vector4(1, 2, 3, 4);
Vector3* myVec3 = reinterpret_cast<Vector3*>(myVec4);
I would assume "maybe", since the class is contiguous in memory, and doesn't have any virtual methods. However, I want to be very sure before I make any risky moves.