When I used to work in c++, I didn't use to throw exception in constructor because of memory leak problem it can lead to, I had learned it the hard way. Anyone working with c++ knows how difficult and problematic memory leak can be.
But if you are in c#/Java, then you don't have this problem, because garbage collector will collect the memory. If you are using C#, I think it is preferable to use property tofor nice and consistent way to make sure that data constraints are guaranteed.
public class MyClass
{
private string _text;
public string Text
{
get
{
return _text;
}
set
{
if (string.IsNullOrWhiteSpace(value))
throw new ArgumentException("Text cannot be empty");
_text = value;
}
}
public MyClass(string text)
{
Text = text;
// continue with normal construction
}
}