Возврат нескольких auto_ptrs из функции - PullRequest
2 голосов
/ 30 июля 2009

У меня есть функция, которая выделяет две переменные в куче и возвращает их вызывающей стороне. Примерно так:

void Create1(Obj** obj1, Obj** obj2)
{
    *obj1 = new Obj;
    *obj2 = new Obj;
}

Обычно, в подобных случаях, когда у меня есть функция с одной переменной, я использую трюк "source" с auto_ptr:

auto_ptr<Obj> Create2()
{
    return new Obj;
}

Я хотел бы переписать Create1, используя auto_ptr, но не уверен, как это сделать. Насколько я понимаю, я не могу вернуть auto_ptr по ссылке, я прав? Так возможно ли это вообще?

Ответы [ 2 ]

4 голосов
/ 30 июля 2009

Вы можете присвоить std::auto_ptr, вызвав его reset метод:

void f( std::auto_ptr<Obj>& pObj1, std::auto_ptr<Obj>& pObj2 )
{
    pObj1.reset( new Obj );
    pObj2.reset( new Obj );
}

Вызов reset правильно удалит все, на что ранее указывал auto_ptr.

4 голосов
/ 30 июля 2009

Смежный вопрос: Возвращение нескольких значений из функции C ++

Я не ожидаю проблем с использованием auto_ptr в паре или кортеже.Возвращение структуры, содержащей пару членов auto_ptr, также должно работать.

...