Nick Sabalausky wrote:
"Justin Johansson" <n...@spam.com> wrote in message news:hjo31b$275...@digitalmars.com...
Ary Borenszweig wrote:
Walter Bright wrote:
Justin Johansson wrote:
(1) For some reason (possibly valid only in an historic context), I have this great aversion to throwing exceptions from inside C++ constructors. From memory, I once threw an exception from inside a constructor with an early C++ compiler and wound up with stack corruption or something like that, and consequently I developed the practice of forever more avoiding throwing from inside a C++ constructor.
I'm a believer in the methodology that a constructor should be "trivial" in that it cannot fail (i.e. cannot throw). I'm probably in the minority with that view, but you shouldn't feel like you're doing the wrong thing when you stick to such a style.
auto x = new BigInt(someString);

How do you implement BigInt's constructor without being able to throw an exception? Or would you do it like:

auto x = BigInt.fromString(someString);

to be able to throw? (just to obey the "no throw in constructors"... but that's not as trivial as the previous form)
A factory method is the way to go.  Different languages give you
different means for achieving this design pattern but nevertheless
all such means make for the better factoring of code.


Still within the context of this D BigInt example, what benefit does using a factory method provide over a throwing constructor?

I've always seen factories as falling into one of two categories: 1. A hack to get around a limitation in a language's constructor feature. or 2. Part of a helper API (I guess the kids are calling those "facades" these days...) for pre-configuring a new instance in a commonly-useful, but non-default way.

Factories are mostly (imho) important in the fourth scenario: when you want to create an object from data.

Andrei

Reply via email to