Strange problem with class definition and delay function

I have been experiencing some problems with a code I am writing. After some work I were able to reduce the code to the following MWE:

class Problem {
public:
	Problem(char * problematic_chars) {
		delay(1); // If this line is commented there is no problem.
	}
};

Problem its_a_hard_life("abc");

void setup() {
	Serial.begin(9600);
}

void loop() {
	int i = 0;
	while (true) {
		Serial.println(i++);
		delay(500);
	}
}

If I upload that, exactly as it is, to my Arduino Uno, it hangs and nothing is shown in the serial monitor. If the line with the comment is commented, everything works as expected. Also, if the Problem constructor does not receive anything, things work fine. I mean that the following code works OK:

class Problem {
public:
	Problem(void) {
		delay(1);
	}
};

Problem its_a_hard_life();

void setup() {
	Serial.begin(9600);
}

void loop() {
	int i = 0;
	while (true) {
		Serial.println(i++);
		delay(500);
	}
}

What is wrong with the first code?

You should not call a constructor that accesses hardware via the core Arduino functions before you're sure that the hardware is initialised. In this case I'm reasonably sure that the 'delay timer' is not initialised yet at the moment that you call the constructor and hence the code hangs there.

It's the reason why you often have a constructor that just sets up some variables and later a begin() method in the class that actually initialises the hardware.

You are right! I moved the call to "delay" into a "setup" method that I call in the standard setup function of Arduino and everything is working perfectly right. Thanks for your answer!