【发布时间】:2015-02-10 16:33:46
【问题描述】:
在下面示例的第一部分中,有什么方法可以初始化(?)类型为 C 的成员变量 c 吗?还是必须使用示例第二部分中显示的 new() 方法?
B 类将 A 类作为注入依赖项。 C类也是如此。B类又由C类组成。
如何将注入的 A 传递给 B 的成员 C?
第 1 部分
class A { // ...; };
class C {
public:
C(A &a) : a(a) {} // constructor
};
// Does not work as is. Want to make compiler manage C lifetime.
class B {
public:
B(A &a); // constructor
C c(a); // member variable
};
// constructor
B::B(A &a) : a(a) {
}
第 2 部分
// Works, but requires programmer to manage C's lifetime.
class B {
public:
B(A &a); // constructor
C *c; // member variable
};
// constructor
B::B(A &a) : a(a) {
c = new C(a);
}
下面有几个很好的答案!我为这个令人困惑的例子道歉。我对所有好的答案和问题都投了赞成票。不幸的是,我只能将一个答案标记为已接受的答案,所以我选择了第一个给我“啊哈”时刻的答案,我看到了解决我真正问题的方法,这比我在这里的蹩脚示例更复杂。
【问题讨论】:
-
通常你不需要
new。而且你永远不会同时使用new/free。是的,C++ 提供了初始化对象的方法。 -
对不起,不好的例子。我根本不想使用
new。可以做到吗?如何? (将编辑问题) -
是的,它可以做到,@StenSoft 的回答告诉你怎么做。
-
另外,您的班级
C没有任何名为a的数据成员。
标签: c++