The explanation was way beyond the beginner level. What I am trying to do is prevent a beginner from doing something that will be a problem. I don't expect anyone to deliberately copy or assign an Arduino library object. If a beginner does the first example
void someFunction(TogglePin blinkObj,unsigned long newTime) {
blinkObj.setDelay(newTime);
}
with the compiler default copy constructor the code will "work" but not update the original object. This will confuse the beginner and lead to forum posts here complaining the compiler is wrong or the library is broken. In fact the system did exactly what is was designed to do.
By making the copy constructor private the beginner will get an error message (a probably incomprehensible one to a beginner), and know there may be a problem.
/home/xxx/sketchbook/cppBlink/cppBlink.ino: In function 'void loop()':
cppBlink:101:26: error: 'TogglePin::TogglePin(const TogglePin&)' is private within this context
someFunction(blink1,500);
^
/home/xxx/sketchbook/cppBlink/cppBlink.ino:29:6: note: declared private here
TogglePin (const TogglePin& a); // disallow copy constructor
^~~~~~~~~
They can then explore this message by searching or posting to the forums. If copying an object was really useful they could get advice on how to "fix" it. The simplest would be to comment out the private copy constructor.