これは、依存性注入を扱っていたMiško Hevery のGoogle トークの 1 つのコメントで私が尋ねた質問でもありますが、コメントに埋もれてしまいました。
依存関係を一緒に配線するファクトリー/ビルダーのステップがC++でどのように機能するのだろうか。
つまり、B に依存するクラス A があります。ビルダーは B をヒープに割り当て、A のコンストラクターで B にポインターを渡し、同時にヒープに割り当て、A へのポインターを返します。
後片付けは誰がするの?完成後はビルダーに片付けてもらってもいいですか?話の中で、ビルダーは同じ寿命を持つことが期待されるオブジェクトをセットアップするか、少なくとも依存関係の寿命が長くなる必要があると述べているため、これは正しい方法のようです (私もそれについて質問があります)。コードでの意味:
class builder {
public:
builder() :
m_ClassA(NULL),m_ClassB(NULL) {
}
~builder() {
if (m_ClassB) {
delete m_ClassB;
}
if (m_ClassA) {
delete m_ClassA;
}
}
ClassA *build() {
m_ClassB = new class B;
m_ClassA = new class A(m_ClassB);
return m_ClassA;
}
};
ここで、注入先のオブジェクトの有効期間よりも長く続くことが予想される依存関係がある場合 (ClassC がその依存関係であるとします)、ビルド メソッドを次のように変更する必要があることを理解しています。
ClassA *builder::build(ClassC *classC) {
m_ClassB = new class B;
m_ClassA = new class A(m_ClassB, classC);
return m_ClassA;
}
あなたの好みのアプローチは何ですか?