Lets say I have a record with an Operator overload "Copy" or := and I pass a record to a function by value, does the compiler used this operator when doing so and also does the compiler use the Initialize operator if one is supplied in the Record def?
Copy is used on Assignment. If you pass it as a value parameter AddRef is used. In how far initialize is used, I don't know right of the bat.
In converting C++ code, it seems there may be some semantics not fully covered in detail in documentation that I can find anywhere.
C++ uses the operator overloads when passing to a function as value, otherwise as REF does not call these.
C++ only has the copy constructor and assignment operator. Pascal distinguishes between Copy and AddRef (PascalDragon explained that reason once, I already forgot). This makes it a bit more difficult but can be worked with.
while we are at it, is there any reason CLASSES can't have operator overloads? I know I can create overloads within the unit of Type declaration for Classes but that limited and only works in FpcObject mode and does not seem to offer an easy way to get the SELF parameter.
Well general operator overloads because they create temporary objects and this does not mix well with manual memory management. Take the + operator, if you have A+B+C you create first a temporary object B+C and then call the Operator with it and A again (at least I believe it was reverse order, due to AST parsing, maybe it's first A+B and then +C). With classes that temporary object would never be freed.
But you can use operator overloads with COM Interfaces as those are reference counted and do not run into that Problem, see the unit gmp for examples. What is not possible is to combine overloads with generics in interfaces, this is only possible with records.
If you mean management operators (initialize, finalize, copy, addref), well thats simple: You have constructors and destructors and the rest is just pointers so no actual copying happens. So they are not needed.
The better question is why they don't exist for objects ;)