почему не принято использовать boost :: option в качестве scoped_ptr, кажется, что это лучше, поскольку объект создается в стеке, а не в куче. Но я никогда не видел, чтобы это использовалось таким образом. Мой вопрос заключается в том, каковы недостатки использования boost :: option в качестве вида scoped_ptr, кроме очевидной неспособности сделать полиморфизм?
Например, я бы сказал, семантика.
Мне нужно обновить память на boost::optional
а также boost::scoped_ptr
детали, чтобы высказать мнение по техническому аспекту, но когда дело доходит до ремонтопригодности, используя optional
s вместо указателей может запутать людей, которые читают ваш код.
Причина в том, что полиморфизм является точка scoped_ptr
, В противном случае вы просто объявите переменную локально, в стеке.
int main()
{
Class object(52, 25); //sample declaration, with constructor arguments passed
}
РЕДАКТИРОВАТЬ 1 (ответ на дополнительную информацию из комментариев):
boost::scoped_ptr
на самом деле редко используется для целей, которые вы описываете (главным образом потому, что вы не можете ни копировать, ни перемещать boost::scoped_ptr
, делая класс, вы сохраняете его в некопируемом и неподвижном виде). Кажется, что boost::optional
подходит для этой цели, но …
Обратите внимание, что нет смысла в местном использовании boost::optional
(то есть не возвращается из функции), так как вы можете создавать объекты в стеке по своему желанию:
void another_function()
{
if(some_condition())
{
Class object(0, 0); // create the object
// use the object
}
else
{
// don't use the object
}
}