Инициализация ссылки
Как известно, в С++ ссылки, являющиеся переменными класса, нужно инициализировать в списке инициализации конструктора:
А теперь о прекрасном. Как проинициализировать ссылку, когда нечем? Например в конструкторе по-умолчанию?
Первое что приходит в голову - использовать указатель со значением NULL по-умолчанию.
Не-ет, умельцы догадались, что можно замкнуть ссылку на себя. Звучит страшно, как короткое замыкание:
Как известно, в С++ ссылки, являющиеся переменными класса, нужно инициализировать в списке инициализации конструктора:
class A() {См. короткое замыкание...
std::vector<int> & m_refData; // ссылка на массив
}
A::A(std::vector<int> & data)Короткое замыкание
: m_refData(data) // инициализация ссылки входящим массивом списке инициализации
{
m_refData = data; //ошибка! Здесь нельзя инициализировать ссылку!
// Здесь это является вызовом оператора =
}
А теперь о прекрасном. Как проинициализировать ссылку, когда нечем? Например в конструкторе по-умолчанию?
Первое что приходит в голову - использовать указатель со значением NULL по-умолчанию.
Не-ет, умельцы догадались, что можно замкнуть ссылку на себя. Звучит страшно, как короткое замыкание:
A::A(std::vector<int> & data)
: m_refData(m_refData) // инициализация ссылки самой собой
{
}
No comments:
Post a Comment