Я пытаюсь понять, когда настало время использовать некоторые из структур, которые поставляются с boost
, и у вас возникли вопросы относительно использования boost::optional
со ссылкой.boost :: optional <T&> vs T *
Пусть у меня есть следующий класс, используя boost::optional
:
class MyClass {
public:
MyClass() {}
initialise(Helper& helper) {
this->helper = helper;
}
boost::optional<Helper&> getHelper() {
return helper;
}
private:
boost::optional<Helper&> helper;
}
Почему я использую выше вместо:
class MyClass {
public:
MyClass() : helper(nullptr) {}
initialise(Helper& helper) {
this->helper = &helper;
}
Helper* getHelper() {
return helper;
}
private:
Helper* helper;
}
Они оба передают то же самое намерение, то есть, что getHelper
может вернуться null
, и вызывающему абоненту еще нужно проверить, был ли возвращен помощник.
Если вы используете только boost::optional
, если вам нужно знать разницу между «значением», nullptr
и «не значением»?
boost :: optional только обертка T *. Предпочитаю T *, чем boost :: optional из-за boost :: optional странно в C++. T * имеет лучшую читаемость –
jean