Плохая практика возвращать unique_ptr для сырого указателя, как семантика владения?

Я написал статический метод фабрики, который возвращает новый объект Foobar, заполненный из другого объекта данных. Недавно я был одержим семантикой владения и задаюсь вопросом, правильно ли я передаю мысль, заставляя этот фабричный метод возвращать unique_ptr.

class Foobar {
public:
    static unique_ptr<Foobar> factory(DataObject data);
}

Я хочу сказать клиентскому коду, что указатель принадлежит ему. Без уникального указателя я бы просто вернул Foobar*. Однако я хотел бы принудительно удалить эту память, чтобы избежать возможных ошибок, поэтому unique_ptr кажется подходящим решением. Если клиент хочет продлить время жизни указателя, он просто вызывает .release(), как только получит unique_ptr.

Foobar* myFoo = Foobar::factory(data).release();

Мой вопрос состоит из двух частей:

  1. Передает ли этот подход правильную семантику владения?
  2. Является ли "плохой практикой" возвращать unique_ptr вместо необработанного указателя?
49
задан Bret Kuhns 3 January 2012 в 10:51
поделиться