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 for 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 } }