場合によっては、失敗する可能性のあるコンストラクターを記述する必要があります。たとえば、次のようなファイルパスでオブジェクトをインスタンス化するとします。
obj = new Object("/home/user/foo_file")
パスが適切なファイルを指している限り、すべて問題ありません。ただし、文字列が有効なパスでない場合は、問題が発生するはずです。しかし、どのように?
あなたは出来る:
- 例外を投げる
- nullオブジェクトを返します(プログラミング言語でコンストラクタが値を返すことができる場合)
- 有効なオブジェクトを返しますが、そのパスが適切に設定されなかったことを示すフラグが付いています(ugh)
- 他の?
さまざまなプログラミング言語の「ベストプラクティス」がこれを異なる方法で実装すると思います。たとえば、ObjCは(2)を好むと思います。ただし、(2)は、コンストラクターが戻り型としてvoidを持たなければならないC ++で実装することは不可能です。その場合、(1)が使用されると考えます。
選択したプログラミング言語で、この問題の処理方法とその理由を説明できますか?
void
-オブジェクトを返します。
new
呼び出しoperator new
、そしてそれを埋めるためのコンストラクター。コンストラクターは何も返さず、new
から取得したポインターを返しますoperator new
。void
ただし、「何も返さない」ということは、「返品する」ことを意味します。