Я пытаюсь понять, когда подходящее время для использования некоторых структур, которые поставляются с boost, и возник вопрос о использовании boost::optional со ссылкой.
Предположим, что у меня есть следующий класс, используя 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 и "не значением"?