const引用必须在构造函数base / member初始化列表中初始化

时间:2010-07-02 18:30:18

标签: c++ constructor reference initialization

我试图阻止访问我正在编写的类的默认构造函数。我希望其他人使用的构造函数需要对另一个对象的const引用。我已将默认构造函数设为私有,以防止其他人使用它。我收到默认构造函数的编译器错误,因为const引用成员变量未正确初始化。我该怎么做才能编译?

class CFoo
{
public:
    CFoo();
    ~CFoo();
};

class CBar
{
public:
    CBar(const CFoo& foo) : fooReference(foo)
    {
    }

    ~CBar();

private:
    const CFoo& fooReference;

    CBar() // I am getting a compiler error because I don't know what to do with fooReference here...
    {
    }
};

2 个答案:

答案 0 :(得分:13)

不要声明默认构造函数。 如果你声明自己的构造函数,它无论如何都是不可用的(自动地)。

class CBar
{
public:
    CBar(const CFoo& foo) : fooReference(foo)
    {
    }
private:
    const CFoo& fooReference;
};

对构造函数的相当全面的解释可以在这里找到: http://www.parashift.com/c++-faq-lite/ctors.html

答案 1 :(得分:4)

创建你不想使用的默认构造函数的最简单方法(你的构造函数是这样的,是吗?)只是没有定义它,即:

class CBar
{
public:
    CBar(const CFoo& foo) : fooReference(foo)
    {
    }

    ~CBar();

private:
    const CFoo& fooReference;

    CBar();
};

在这种情况下,它可能有点多余,因为编译器不会为具有引用成员的类创建默认构造函数,但最好将其放在那里,以防您删除引用成员。