Просто хотелось мнения по вопросу дизайна. Если у вас есть класс С++, чем собственный объект, вы бы использовали интеллектуальные указатели для достижения этого?
class Example {
public:
// ...
private:
boost::scoped_ptr<Owned> data;
};
Объект "Owned" не может быть сохранен по значению, поскольку он может меняться в течение всего жизненного цикла объекта.
Мое мнение в том, что с одной стороны вы четко указываете, что объект принадлежит и обеспечивает его удаление, но на обратной стороне вы можете просто просто иметь обычный указатель и удалить его в деструкторе. Это перебор?
Followup: Просто хотел сказать спасибо за все ваши ответы. Спасибо за хедз-ап о auto_ptr, оставив другой объект с указателем NULL, когда весь объект скопирован, я использовал auto_ptr экстенсивно, но пока не думал об этом. Я делаю в основном все мои классы boost:: noncopyable, если у меня нет веской причины, так что там не о чем беспокоиться. И спасибо также за информацию об утечке памяти в исключениях, что тоже хорошо знать. Я стараюсь не писать вещи, которые могут вызвать исключения в конструкторе, в любом случае - есть лучшие способы сделать это - так что это не должно быть проблемой.
У меня был еще один вопрос. То, что я хотел, когда я задавал этот вопрос, состоял в том, чтобы знать, действительно ли кто-то это сделал, и все вы, кажется, упоминаете, что это хорошая идея теоретически, но никто не сказал, что они действительно это делают. Что меня удивляет! Конечно, один объект, владеющий указателем на другой, не является новой идеей, я бы ожидал, что вы все это сделаете раньше, в какой-то момент. Что происходит?