我试图阻止访问我正在编写的类的默认构造函数。我希望其他人使用的构造函数需要对另一个对象的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...
{
}
};
答案 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();
};
在这种情况下,它可能有点多余,因为编译器不会为具有引用成员的类创建默认构造函数,但最好将其放在那里,以防您删除引用成员。