【发布时间】:2012-07-05 11:48:19
【问题描述】:
在 C++ 中,我有一个对象 A,它有一个接受 istream 的构造函数(从文件中加载自身)。我有另一个类有A 作为成员。我无法从初始化列表中调用A 的构造函数,因为我还没有打开istream。一旦我在我的类的构造函数中打开它,调用A 的构造函数就来不及了。有没有办法将初始化列表中的istream 打开到某个临时对象中,以便我可以将它发送到A 的构造函数?
如果有,在调用初始化列表的顺序上是否有任何类型的保证,以便istream 在A 之前被初始化?
一个例子可能会有所帮助:
class A {
public:
A(std::istream const&);
}
class B {
public:
B(std::istream const&);
}
class MyClass {
A a;
B b;
public:
MyClass() : a(is), b(is) { // <-- How to do this?
std::istream is("path");
}
}
【问题讨论】:
-
听起来dependency injection 可能是一个可能的解决方案。这也可能是一个有趣的阅读:misko.hevery.com/code-reviewers-guide/….
-
@baruch 动态创建
a和b有什么问题在初始化istream之后? -
@EitanT istream 仅在构造之前/期间需要。一旦构造函数开始运行,然后在整个使用
MyClass,我对这个istream没有用处 -
@EitanT 是成员,而不是指针。我能获得的自动内存管理越多越好。
-
@baruch 当然,但你必须接受一些事情。
标签: c++ oop constructor