You basically understand correctly, although what you describe is a little bit closer to the Protobuf model than the Cap'n Proto model. They are very similar, but the difference with capnp is that the generated classes do not create a self-contained copy of the message content, but rather act as cursors into the underlying message buffer. The setter methods write directly into the underlying buffer, and the getter methods read directly from it (or return pointers pointing into it). This differs from Protobuf where the buffer is parsed into an object tree upfront, and the generated class represents that object tree -- once you have that object tree, the byte buffer can be discarded.
The reason this matters is, if you use a design where you convert CnP_Config into your traditional Config class upfront, you lose this zero-copy benefit. At that point in time, you are presumably making copies of all the message contents into an in-memory object tree. If you can avoid that, you will get a performance benefit. One way to avoid it would be to use CnP_Config::Reader directly, replacing your old Config class. Another approach might be to refactor the Config class so that it can be backed by a CnP_Config::Reader under the hood, to avoid the upfront copy.
That said, even with the upfront copy, you should see a performance benefit vs. YAML, which is much more expensive to parse.
-Kenton