extent:
Is there a time when a non-static objects constructor is called before init?
Non-static objects are constructed, well, whenever the object is constructed!
Consider:
void setup(void)
{
int i = 5;
while (i--)
{
MyObject my_instance(i);
my_instance.do_something();
}
}
In this case, my_instance is constructed 5 times, each time through the while loop, and destroyed at the end of it.
extent:
I noticed that the LiquidCrystal library is doing exactly this, calling pinMode for rs/rw/enable pins in it's constructor.
pinMode() may be safe, it may not. I haven't studied init() well enough to know either way. The fat that init() does lots of system setup leads me to steer clear of it precisely because I don't want to sort through every nuance of init() to determine what's safe or what's not.