在实例中传递另一个类
我想知道什么是最佳实践。在同一类的两个实例中传递(另一个类)(让我们称之为“主”)。所以,基本上在第一个构造函数中,我可以初始化外部实例(让我们称之为“Shared”),然后在main()中处理这个类时将其设置为特定值。在实例中传递另一个类
所以'共享',可能是一个整数,现在说999。
现在如果我创建主类'Primary'的另一个实例呢?最好的方式来访问已被初始化的'Shared'的外部实例 - 因为如果我没有正确处理这个问题,'Primary'的构造函数在再次调用时会继续并创建一个'Shared'实例,因此我失去了价值999 ..我可以想到一些凌乱的解决方案涉及动态指针,如果声明(只),但我有一种感觉可能有一个更简单,更干净的解决方案?
据我了解:
- 你有A级
- 你有一个B类
- 对于所有A类成员有B类的单个实例
您没有提到是否有来自A构造函数的参数用于初始化B!
用于B的第二个A的参数会发生什么变化?
所以我们假定B是默认构造的。
我们还将假设您需要对B的实例进行懒惰评估,否则您只需使用静态成员。
class A
{
B& bRef;
public:
A()
:bRef(getLazyB()) // Get a reference to the only B for your object.
{}
private:
static B& getLazyB()
{
static B instance; // Created on first use
return instance; // returned to all users.
}
};
使构造函数获取指向共享类的指针或引用。外部建设更容易。
class Shared;
class Same
{
shared& shared_;
Same(Shared& s) { shared_ = s; }
}
随着appropiate使用const和其他的构造等
如果要引用共享类的实例,那么需要解决的一件事就是所有权 - 谁负责清理“共享”对象实例?它是“Same”实例还是其他什么?没有一个正确的答案 - 但是这是共享设计时需要考虑的问题。 – 2009-11-09 19:06:49
同意重新拥有。 – Mark 2009-11-09 19:14:57
这取决于你的类的语义。如果外部类不是真的在外面,而是恰好在实例之间共享的一些模糊的实现细节,则将第一个实例传递给第二个实例的构造函数,并在那里获取对外部实例的引用。
如果外部类真的是一个具有自身意义的外部类,那么在外部创建它并将其传递给构造函数,就像Mark建议的那样。
如果不只是两个特定的实例,但所有实例都共享外部类的相同实例,请考虑将其设置为类的静态成员,正如Martin York所建议的那样。
难以遵循......你能详细说明一些代码吗? – fretje 2009-11-09 19:00:40
你的问题很混乱。类不会被初始化;实例。你能否修改你的问题来更精确地使用“类”和“实例”这些术语? – 2009-11-09 19:00:46
并尽量避免像“这个班级”这样的词汇。我无法分辨您是指外部班级还是班级的其他实例(无论他们是什么)。 – 2009-11-09 19:04:16