После прочтения вопроса о разнице между указателями и ссылками я решил, что хотел бы использовать ссылки вместо указателей для полей класса. Однако кажется, что это невозможно, потому что они не могут быть объявлены неинициализированными (правильно?).
В конкретном сценарии, над которым я сейчас работаю, я не хочу использовать обычные переменные (какой правильный термин для них, кстати?), потому что они автоматически инициализируются, когда я их объявляю.
В моем фрагменте bar1 автоматически создается с помощью конструктора по умолчанию (чего я не хочу), а bar2 вызывает ошибку компилятора, потому что вы не можете использовать неинициализированные ссылки (правильно?), а * bar3 счастлив как ларри, потому что указатели могут быть объявлены неинициализированными (кстати, лучше ли установить это значение NULL?).
class Foo
{
public:
Bar bar1;
Bar &bar2;
Bar *bar3;
}
Похоже, я должен использовать указатели в этом сценарии, это правда? Кроме того, какой лучший способ использовать переменную? Синтаксис → немного громоздкий... Жесткая удача? Что относительно умных указателей и т.д.? Это релевантно?
Обновление 1:
После попытки реализовать ссылочное поле переменной в моем классе и инициализацию его в конструкторе, почему я могу получить следующую ошибку?
../src/textures/VTexture.cpp: In constructor ‘vimrid::textures::VTexture::VTexture()’:
../src/textures/VTexture.cpp:19: error: uninitialized reference member ‘vimrid::textures::VTexture::image’
Здесь настоящий код:
// VTexture.h
class VTexture
{
public:
VTexture(vimrid::imaging::ImageMatrix &rImage);
private:
vimrid::imaging::ImageMatrix ℑ
}
// VTexture.cpp
VTexture::VTexture(ImageMatrix &rImage)
: image(rImage)
{
}
Я также пытался сделать это в заголовке, но не повезло (я получаю ту же ошибку).
// VTexture.h
class VTexture
{
public:
VTexture(vimrid::imaging::ImageMatrix &rimage) : image(rImage) { }
}
Обновление 2:
Фред Ларсон - Да! Существует конструктор по умолчанию; Я пренебрег этим, потому что думал, что это не относится к проблеме (как глупо от меня). После удаления конструктора по умолчанию я вызвал ошибку компилятора, потому что класс используется с std::vector, который требует, чтобы он был конструктором по умолчанию. Таким образом, похоже, что я должен использовать конструктор по умолчанию, и поэтому должен использовать указатель. Позор... или не так ли?:)