这也是我在MiškoHevery的
google talks的一个评论中提到的一个问题,即处理依赖注入,但它被埋在评论中。
我不知道如何将依赖关系连接在一起的工厂/制造商步骤可以在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是那个依赖),我明白我们应该把build方法改成如下:
ClassA *builder::build(ClassC *classC) { m_ClassB = new class B; m_ClassA = new class A(m_ClassB,classC); return m_ClassA; }
你最喜欢的方法是什么?
这个讨论是关于Java和依赖注入。
在C中,我们尽量不要传递RAW指针。这是因为RAW指针没有与之关联的所有权语义。如果您没有所有权,那么我们不知道谁负责清理对象。
我发现大多数时间依赖注入是通过C中的引用完成的。
在极少数情况下,您必须使用指针,根据您想要管理所有权的方式将其包装在std::unique_ptr<>或std::shared_ptr<>中。
如果您无法使用C 11功能,请使用std :: auto_ptr<>或boost :: shared_ptr<>。
我还会指出,C和Java的编程风格现在如此分歧,将一种语言的风格应用于另一种语言将不可避免地导致灾难。