В чем преимущество std::optional перед std::shared_ptr и std::unique_ptr?C++

Программы на C++. Форум разработчиков
Anonymous
В чем преимущество std::optional перед std::shared_ptr и std::unique_ptr?

Сообщение Anonymous »

Обоснование std::optional заключается в том, что он может содержать или не содержать значение. Следовательно, это избавляет нас от необходимости строить, возможно, большой объект, если он нам не нужен.

Например, фабрика здесь не будет создавать объект, если не выполнено какое-либо условие:

Код: Выделить всё

#include 
#include 
#include 

std::optional create(bool b)
{
if(b)
return "Godzilla"; //string is constructed
else
return {}; //no construction of the string required
}
Но тогда чем это отличается от этого:

Код: Выделить всё

std::shared_ptr create(bool b)
{
if(b)
return std::make_shared("Godzilla"); //string is constructed
else
return nullptr; //no construction of the string required
}
Что мы выиграем, добавив std::optional вместо простого использования std::shared_ptr в целом?

Подробнее здесь: https://stackoverflow.com/questions/429 ... -stdunique

Вернуться в «C++»