我无法弄清楚如何制作通用初始化函数,它会为特定成员变量创建一个新对象。
我们说我有一个Foo
个对象,它有两个Bar
个成员。
class Bar {
public:
Bar();
~Bar();
};
class Foo {
public:
Foo();
~Foo();
private:
void init(Bar * x);
Bar * a;
Bar * b;
};
现在我想以同样的方式初始化两个Bar
成员:
Foo::Foo(){
init(a);
init(b);
}
void Foo::init(Bar * x) {
x = new Bar();
std::cout << x << std::endl;
std::cout << a << std::endl;
}
Foo
中的初始化函数应为成员Bar()
和成员a
创建新的b
。但是,成员a
和本地参数x
的地址不同(即Foo.a未初始化)。如何在a
函数中初始化b
和init
?
答案 0 :(得分:3)
您的init
需要通过引用获取其参数:
void Foo::init(Bar*& x) {
x = new Bar();
}
这样,您分配的new Bar
实际上会转到a
和b
。否则,你只是分配一次临时(并泄漏它)两次。
或者,您可以将init()
命名为create()
(或等效),然后返回new Bar
:
Bar* Foo::create() {
return new Bar;
}
这样你的构造函数可以是:
Foo() {
a = create();
b = create();
}
或者简单地说:
Foo()
: a(create())
, b(create())
{ }