почему бы не использовать boost :: необязательный как лучший scoped_ptr

почему не принято использовать boost :: option в качестве scoped_ptr, кажется, что это лучше, поскольку объект создается в стеке, а не в куче. Но я никогда не видел, чтобы это использовалось таким образом. Мой вопрос заключается в том, каковы недостатки использования boost :: option в качестве вида scoped_ptr, кроме очевидной неспособности сделать полиморфизм?

1

Решение

Например, я бы сказал, семантика.

Мне нужно обновить память на boost::optional а также boost::scoped_ptr детали, чтобы высказать мнение по техническому аспекту, но когда дело доходит до ремонтопригодности, используя optionals вместо указателей может запутать людей, которые читают ваш код.

2

Другие решения

Причина в том, что полиморфизм является точка 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
}
}
2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector