从参数

时间:2015-05-05 12:20:34

标签: c++ pointers constructor

我无法弄清楚如何制作通用初始化函数,它会为特定成员变量创建一个新对象。

我们说我有一个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函数中初始化binit

1 个答案:

答案 0 :(得分:3)

您的init需要通过引用获取其参数:

void Foo::init(Bar*& x) {
    x = new Bar();
}

这样,您分配的new Bar实际上会转到ab。否则,你只是分配一次临时(并泄漏它)两次。

或者,您可以将init()命名为create()(或等效),然后返回new Bar

Bar* Foo::create() {
    return new Bar;
}

这样你的构造函数可以是:

Foo() {
    a = create();
    b = create();
}

或者简单地说:

Foo()
    : a(create())
    , b(create())
{ }