Сообщение Re: Ссылка от 06.12.2023 16:16
Изменено 06.12.2023 18:27 rg45
Re: Ссылка
Здравствуйте, CEMb, Вы писали:
CEM>
CEM>Чего хочется:
CEM>1. Удобства в коде. Поэтому любые другие идеи приветствуются тоже!
CEM>2. Оптимизации. Но даже с GetReloadTime() проблем бы не было: компилятор туда ровно ту же ссылку на переменную Device::reloadTime_ поставит. Единственный момент тут — это проверка, что device_ не nullptr. Таких объектов как reloadTime_ может быть много, и они активно используются в логике. Хотелось бы не добавлять условия, если есть возможность это не делать.
Я не совсем понимаю, каким образом эта ссылка избавляет от проверок device_ на nullptr. Ведь когда заканчивается вермя жизни объекта device, ссылка тут же становится невалидной. А если устройство класса Object гарантирует, что время жизни объекта Object не превышает время жизни объекта Device, то проверки на nullptr достаточно только одной — в конструкторе класса Object.
Приватная фунция-член вместо ссылки — не вариант?
И в коде потом используешь reloadTime() вместо reloadTime_;
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_ может быть много, и они активно используются в логике. Хотелось бы не добавлять условия, если есть возможность это не делать.
Я не совсем понимаю, каким образом эта ссылка избавляет от проверок device_ на nullptr. Ведь когда заканчивается вермя жизни объекта device, ссылка тут же становится невалидной. А если устройство класса Object гарантирует, что время жизни объекта Object не превышает время жизни объекта Device, то проверки на nullptr достаточно только одной — в конструкторе класса Object.
Приватная фунция-член вместо ссылки — не вариант?
class Device;
class Object
{
private:
std::unique_ptr<Device> device_{};
float reloadTime() const
{
assert(device_);
return device_->GetReloadTime();
}
};
И в коде потом используешь reloadTime() вместо reloadTime_;
Re: Ссылка
Здравствуйте, CEMb, Вы писали:
CEM>
CEM>Чего хочется:
CEM>1. Удобства в коде. Поэтому любые другие идеи приветствуются тоже!
CEM>2. Оптимизации. Но даже с GetReloadTime() проблем бы не было: компилятор туда ровно ту же ссылку на переменную Device::reloadTime_ поставит. Единственный момент тут — это проверка, что device_ не nullptr. Таких объектов как reloadTime_ может быть много, и они активно используются в логике. Хотелось бы не добавлять условия, если есть возможность это не делать.
Я не совсем понимаю, каким образом эта ссылка избавляет от проверок device_ на nullptr. Ведь когда заканчивается вермя жизни объекта device, ссылка тут же становится невалидной. А если устройство класса Object гарантирует, что время жизни объекта Object не превышает время жизни объекта Device, то проверки на nullptr достаточно только одной — в конструкторе класса Object.
Приватная фунция-член вместо ссылки — не вариант?
И в коде потом используешь reloadTime() вместо reloadTime_;
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_ может быть много, и они активно используются в логике. Хотелось бы не добавлять условия, если есть возможность это не делать.
Я не совсем понимаю, каким образом эта ссылка избавляет от проверок device_ на nullptr. Ведь когда заканчивается вермя жизни объекта device, ссылка тут же становится невалидной. А если устройство класса Object гарантирует, что время жизни объекта Object не превышает время жизни объекта Device, то проверки на nullptr достаточно только одной — в конструкторе класса Object.
Приватная фунция-член вместо ссылки — не вариант?
class Device;
class Object
{
private:
std::unique_ptr<Device> device_{};
float reloadTime() const {
assert(device_);
return device_->GetReloadTime();
}
};
И в коде потом используешь reloadTime() вместо reloadTime_;