Я пытаюсь блокировать доступ к конструктору по умолчанию класса, который я пишу. Конструктор, которого я хочу, чтобы другие использовали, требует ссылки константы на другой объект. Я сделал конструктора по умолчанию частным, чтобы препятствовать тому, чтобы другие использовали его. Я получаю ошибку компилятора для конструктора по умолчанию, потому что ссылочная членская переменная константы не инициализируется правильно. Что я могу сделать для создания этой компиляции?
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...
{
}
};
не объявляет конструктор по умолчанию. Он в любом случае недоступен (автоматически), если вы объявите свой собственный конструктор.
class CBar
{
public:
CBar(const CFoo& foo) : fooReference(foo)
{
}
private:
const CFoo& fooReference;
};
довольно исчерпывающее объяснение конструкторов можно найти здесь: http://www.parashift.com/c++-faq-lite/ctors.html
Самый простой способ создать конструктор по умолчанию, который вы не хотите использовать (как в случае с вашим конструктором, верно?), Просто не определять его, то есть:
class CBar
{
public:
CBar(const CFoo& foo) : fooReference(foo)
{
}
~CBar();
private:
const CFoo& fooReference;
CBar();
};
В этом случае это может быть немного лишним, потому что компилятор не будет создавать конструктор по умолчанию для класса со ссылочным членом, но лучше поместить его туда на случай, если вы удалите ссылочный член.