Представьте, что я создаю экземпляр Foo в куче в методе / функции и передаю его вызывающей стороне.Какой вид smartpointer я бы использовал?
smartptr new_foo() {
smartptr foo = new Foo();
return foo;
}
void bar() {
smartptr foo = new_foo();
foo->do_something();
// now autodelete foo, don't need it anymore
}
Хорошо ... сейчас: насколько я понимаю, эти smartpointers из boost, scoped_ptr должны быть теми, которые будут использоваться в bar ().Но я не могу создать его в foo (), так как он не копируется.Поэтому я должен создать shared_ptr в foo () и вернуть его.Но нужно ли мне теперь использовать shared_ptr в bar (), или я могу просто «привести» его к shared_ptr в bar ()?
Редактировать
Спасибопока ваши ответы!Итак, теперь у меня есть два решения:
- Использовать только
boost::shared_ptr
- Использовать
std::auto_ptr
в генераторе foo () и boost::shared_ptr
в баре ()
С уважением, я предпочитаю решение только для повышения и не буду смешивать его с STL, за исключением того, что для этого есть действительно веские причины.Итак, следующий вопрос: имеет ли смешанное решение какое-либо преимущество перед решением только для повышения?