从参数初始化成员变量
Initialise member variables from parameter
我不知道如何制作一个通用的初始化函数,它为特定的成员变量创建一个新对象。
假设我有一个 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
中的初始化函数应该为成员 a
和成员 b
创建一个新的 Bar()
。然而,成员 a
和局部参数 x
的地址不同(即 Foo.a 未初始化)。如何在 init
函数中初始化 a
和 b
?
您的 init
需要通过引用获取其参数:
void Foo::init(Bar*& x) {
x = new Bar();
}
这样,您分配的 new Bar
实际上会达到 a
和 b
。否则,您只是分配了一个临时(并泄漏)两次。
或者,您可以将 init()
命名为 create()
(或同等名称),并且只是 return a new Bar
:
Bar* Foo::create() {
return new Bar;
}
这样你的构造函数可以是:
Foo() {
a = create();
b = create();
}
或者简单地说:
Foo()
: a(create())
, b(create())
{ }
我不知道如何制作一个通用的初始化函数,它为特定的成员变量创建一个新对象。
假设我有一个 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
中的初始化函数应该为成员 a
和成员 b
创建一个新的 Bar()
。然而,成员 a
和局部参数 x
的地址不同(即 Foo.a 未初始化)。如何在 init
函数中初始化 a
和 b
?
您的 init
需要通过引用获取其参数:
void Foo::init(Bar*& x) {
x = new Bar();
}
这样,您分配的 new Bar
实际上会达到 a
和 b
。否则,您只是分配了一个临时(并泄漏)两次。
或者,您可以将 init()
命名为 create()
(或同等名称),并且只是 return a new Bar
:
Bar* Foo::create() {
return new Bar;
}
这样你的构造函数可以是:
Foo() {
a = create();
b = create();
}
或者简单地说:
Foo()
: a(create())
, b(create())
{ }