Итак, я писал некоторый код, и у меня было что-то вроде этого:
class Box
{
private:
float x, y, w, h;
public:
//...
Rectangle & GetRect( void ) const
{
return Rectangle( x, y, w, h );
}
};
Потом в каком-то коде:
Rectangle rect = theBox.GetRect();
Это работало в моей отладочной сборке, но в выпуске были "проблемы", возвращающие этот Rectangle по ссылке - я в основном получил неинициализированный прямоугольник. Класс Rectangle имеет оператор = и конструктор копирования. Не вдаваясь в причину этого, меня больше интересует правильный способ возврата (нового) объекта по ссылке с целью присвоения копирования в переменную. Я просто быть глупым? Разве это не должно быть сделано? Я знаю, что могу вернуть указатель и затем разыменование при назначении, но я бы предпочел не делать этого. Некоторая часть меня чувствует, что возвращение по значению приведет к избыточному копированию объекта - компилятор это выяснит и оптимизирует?
Это кажется тривиальным вопросом. Я чувствую себя почти смущенным, я не знаю этого после многих лет написания кода на C ++, так что, надеюсь, кто-то может прояснить это для меня. :)