Здравствуйте, tnikolai, Вы писали:
T>Из функции должны возвращаться данные в виде класса. T>Как сделать так, чтоб в коде, при выходе из области видимости блока, в котором вызывается эта функция, возвращенный класс автоматически удалялся.
Я так понял, что тебе надо вернуть массив объектов? Да?
Ну так сделай прямо и не страдай.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, tnikolai, Вы писали:
T>Из функции должны возвращаться данные в виде класса. T>Как сделать так, чтоб в коде, при выходе из области видимости блока, в котором вызывается эта функция, возвращенный класс автоматически удалялся.
зачем вообще возвращать указатель на нечто что потом еще придется удалять
вручную лучше создать это нечто выше в стеке пусть оно само себя удаляет
передать ссылку на это нечто куда нужно ниже для заполнения
Здравствуйте, tnikolai, Вы писали:
T>Из функции должны возвращаться данные в виде класса. T>Как сделать так, чтоб в коде, при выходе из области видимости блока, в котором вызывается эта функция, возвращенный класс автоматически удалялся.
Если хочется в одну строчку получать объекты, самое простое решение:
std::auto_ptr
Ну а если в функции все просто, то можно смело принимать объект по константной ссылке, RVO/NRVO сделают свое дело.
Здравствуйте, sidorov18, Вы писали:
S>Ну а если в функции все просто, то можно смело принимать объект по константной ссылке, RVO/NRVO сделают свое дело.
Зачем по ссылке? Можно и по значению...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Только, если ты придерживаешься true stl way, то делать принято не так, как-то так примерно:
template<typename TIter>
TIter foo( TIter toInsert )
{
// тут какой-то код, цикл какой-то и т. д.
*toInsert++ = currentElement;
// дальше кодreturn toInsert;
}
void bar()
{
std::vector<MyData> data;
foo( back_inserter( data ) );
}
Ну и понятно, что внутри функции TIter foo( TIter toInsert ), тоже стараются не явно
*toInsert++ =
написать, а использовать какой-нибудь алгоритм, например из хедера algorithm...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, sidorov18, Вы писали:
S>>Ну а если в функции все просто, то можно смело принимать объект по константной ссылке, RVO/NRVO сделают свое дело.
E>Зачем по ссылке? Можно и по значению...
Здравствуйте, sidorov18, Вы писали:
S>Ну да. Оптимизатор должен с этим справится. S>Пример http://ideone.com/b79B3
Ну, в смысле, что если функция по значению возвращает, то сохранять это значение в ссылку, а не в копию никогда не выгодно...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском