Я написал статический метод factory, который возвращает новый объект Foobar, заполненный другим объектом данных. Недавно я был одержим семантикой владения и задаюсь вопросом, передаю ли я правильное сообщение, если этот метод factory возвращает unique_ptr
.
class Foobar {
public:
static unique_ptr<Foobar> factory(DataObject data);
}
Мое намерение - сообщить клиентскому коду, что у них есть указатель. Без умного указателя я просто вернул бы Foobar*
. Однако я хотел бы обеспечить, чтобы эта память была удалена, чтобы избежать возможных ошибок, поэтому unique_ptr
показалось подходящим решением. Если клиент хочет продлить время жизни указателя, он просто вызывает .release()
после получения unique_ptr
.
Foobar* myFoo = Foobar::factory(data).release();
Мой вопрос состоит из двух частей:
- Подходит ли этот подход к правильной семантике собственности?
- Является ли это "плохой практикой" возвращать
unique_ptr
вместо необработанного указателя?