Re: удаление класса, возвращённого функцией
От: Erop Россия  
Дата: 01.07.11 08:28
Оценка:
Здравствуйте, tnikolai, Вы писали:

T>Из функции должны возвращаться данные в виде класса.

T>Как сделать так, чтоб в коде, при выходе из области видимости блока, в котором вызывается эта функция, возвращенный класс автоматически удалялся.


Я так понял, что тебе надо вернуть массив объектов? Да?
Ну так сделай прямо и не страдай.
class MyData { ... };
void foo( std::vector<MeData>& toFill ) {
    //...
}

void bar()
{
    std::vector<MyData> data;
    foo( data );
}
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: удаление класса, возвращённого функцией
От: jyuyjiyuijyu  
Дата: 01.07.11 09:12
Оценка: +1
Здравствуйте, tnikolai, Вы писали:

T>Из функции должны возвращаться данные в виде класса.

T>Как сделать так, чтоб в коде, при выходе из области видимости блока, в котором вызывается эта функция, возвращенный класс автоматически удалялся.
зачем вообще возвращать указатель на нечто что потом еще придется удалять
вручную лучше создать это нечто выше в стеке пусть оно само себя удаляет
передать ссылку на это нечто куда нужно ниже для заполнения
Re: удаление класса, возвращённого функцией
От: sidorov18 США  
Дата: 01.07.11 09:23
Оценка:
Здравствуйте, tnikolai, Вы писали:

T>Из функции должны возвращаться данные в виде класса.

T>Как сделать так, чтоб в коде, при выходе из области видимости блока, в котором вызывается эта функция, возвращенный класс автоматически удалялся.

Если хочется в одну строчку получать объекты, самое простое решение:
std::auto_ptr

Ну а если в функции все просто, то можно смело принимать объект по константной ссылке, RVO/NRVO сделают свое дело.
Re[2]: удаление класса, возвращённого функцией
От: Erop Россия  
Дата: 01.07.11 09:33
Оценка:
Здравствуйте, sidorov18, Вы писали:

S>Ну а если в функции все просто, то можно смело принимать объект по константной ссылке, RVO/NRVO сделают свое дело.


Зачем по ссылке? Можно и по значению...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Добавлю про stl
От: Erop Россия  
Дата: 01.07.11 09:39
Оценка:
E>
E>class MyData { ... };
E>void foo( std::vector<MeData>& toFill ) {
E>    //...
E>}

E>void bar()
E>{
E>    std::vector<MyData> data;
E>    foo( data );
E>}
E>


Только, если ты придерживаешься 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...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: удаление класса, возвращённого функцией
От: sidorov18 США  
Дата: 01.07.11 12:34
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, sidorov18, Вы писали:


S>>Ну а если в функции все просто, то можно смело принимать объект по константной ссылке, RVO/NRVO сделают свое дело.


E>Зачем по ссылке? Можно и по значению...


Ну да. Оптимизатор должен с этим справится.
Пример http://ideone.com/b79B3
Re[4]: удаление класса, возвращённого функцией
От: Erop Россия  
Дата: 01.07.11 12:37
Оценка: +1
Здравствуйте, sidorov18, Вы писали:

S>Ну да. Оптимизатор должен с этим справится.

S>Пример http://ideone.com/b79B3

Ну, в смысле, что если функция по значению возвращает, то сохранять это значение в ссылку, а не в копию никогда не выгодно...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.