Hi Jason,
This is working as intended.
As described in the docs, Readers and Builders both behave like pointers -- they point at something else, but they don't own the data. Copying a Reader is like copying a pointer; it's a shallow copy.
Doing a deep copy is complicated because Cap'n Proto objects are not allocated on the heap. You need to copy *to* some other message. What you can do is something like:
MallocMessageBuilder newMessage;
newMessage.setRoot(someReader);
This will make a deep copy of someReader, making it the root of newMessage. Similarly, struct-typed fields have "set" accessors that make a deep copy.
-Kenton