Сообщение Re: Ссылка от 06.12.2023 16:16
Изменено 06.12.2023 16:17 rg45
Re: Ссылка
Здравствуйте, CEMb, Вы писали:
CEM>
CEM>Чего хочется:
CEM>1. Удобства в коде. Поэтому любые другие идеи приветствуются тоже!
CEM>2. Оптимизации. Но даже с GetReloadTime() проблем бы не было: компилятор туда ровно ту же ссылку на переменную Device::reloadTime_ поставит. Единственный момент тут — это проверка, что device_ не nullptr. Таких объектов как reloadTime_ может быть много, и они активно используются в логике. Хотелось бы не добавлять условия, если есть возможность это не делать.
Приватная фунция-член вместо ссылки — не вариант?
И в коде потом используешь reloadTime() вместо reloadTime_; А в текущем варианте у тебя все шансы наскочить на UB, связанное с использованием битой ссылки.
CEM>
CEM>class Device;
CEM>class Object
CEM>{
CEM>private:
CEM> std::unique_ptr<Device> device_{};
CEM> const float& reloadTime_; // условно, это ссылка, по которой вопрос
CEM>};
CEM>
CEM>Чего хочется:
CEM>1. Удобства в коде. Поэтому любые другие идеи приветствуются тоже!
CEM>2. Оптимизации. Но даже с GetReloadTime() проблем бы не было: компилятор туда ровно ту же ссылку на переменную Device::reloadTime_ поставит. Единственный момент тут — это проверка, что device_ не nullptr. Таких объектов как reloadTime_ может быть много, и они активно используются в логике. Хотелось бы не добавлять условия, если есть возможность это не делать.
Приватная фунция-член вместо ссылки — не вариант?
class Device;
class Object
{
private:
std::unique_ptr<Device> device_{};
const float& reloadTime() const
{
if (device_)
{
return device_->GetReloadTime();
}
throw std::logic_error("Device is null");
}
};
И в коде потом используешь reloadTime() вместо reloadTime_; А в текущем варианте у тебя все шансы наскочить на UB, связанное с использованием битой ссылки.
Re: Ссылка
Здравствуйте, CEMb, Вы писали:
CEM>
CEM>Чего хочется:
CEM>1. Удобства в коде. Поэтому любые другие идеи приветствуются тоже!
CEM>2. Оптимизации. Но даже с GetReloadTime() проблем бы не было: компилятор туда ровно ту же ссылку на переменную Device::reloadTime_ поставит. Единственный момент тут — это проверка, что device_ не nullptr. Таких объектов как reloadTime_ может быть много, и они активно используются в логике. Хотелось бы не добавлять условия, если есть возможность это не делать.
Приватная фунция-член вместо ссылки — не вариант?
И в коде потом используешь reloadTime() вместо reloadTime_; А в текущем варианте у тебя все шансы наскочить на UB, связанное с использованием битой ссылки.
CEM>
CEM>class Device;
CEM>class Object
CEM>{
CEM>private:
CEM> std::unique_ptr<Device> device_{};
CEM> const float& reloadTime_; // условно, это ссылка, по которой вопрос
CEM>};
CEM>
CEM>Чего хочется:
CEM>1. Удобства в коде. Поэтому любые другие идеи приветствуются тоже!
CEM>2. Оптимизации. Но даже с GetReloadTime() проблем бы не было: компилятор туда ровно ту же ссылку на переменную Device::reloadTime_ поставит. Единственный момент тут — это проверка, что device_ не nullptr. Таких объектов как reloadTime_ может быть много, и они активно используются в логике. Хотелось бы не добавлять условия, если есть возможность это не делать.
Приватная фунция-член вместо ссылки — не вариант?
class Device;
class Object
{
private:
std::unique_ptr<Device> device_{};
float reloadTime() const
{
if (device_)
{
return device_->GetReloadTime();
}
throw std::logic_error("Device is null");
}
};
И в коде потом используешь reloadTime() вместо reloadTime_; А в текущем варианте у тебя все шансы наскочить на UB, связанное с использованием битой ссылки.