Форум программистов, компьютерный форум CyberForum.ru

Создание объекта в функции и возврат объекта из нее - C++

Восстановить пароль Регистрация
 
MishaMoix
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 99
20.08.2014, 15:56     Создание объекта в функции и возврат объекта из нее #1
Не могу разобраться с ссылками. Возможно ли вернуть из функции объект созданный в стеке при этом копи конструктор публичный.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Object{
   public:
      Object(){....}
      
      Object& someFunc(){
         Object a;
           //.....
         return a;
       }
 
       Object(const Object& ob){......}
 
   private: //.....
};
Сработает ли корректно someFunc() или же надо создавать объект в куче?

Добавлено через 1 минуту
Если мы сделаем что то типа этого

C++
1
2
3
Object a;
//.....
Object b = a.someFunc();
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2014, 15:56     Создание объекта в функции и возврат объекта из нее
Посмотрите здесь:

Как правильно вызывать функцию объекта из другой функции того же объекта? C++
Какие компонентные функции отвечают за создание объекта? C++
При возврате объекта из функции пишет, что для объекта не определен констуктор копирования C++
Возврат объекта класса из функции C++
C++ Возврат и присвоение объекта из функции без копирования
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pingvinoff
 Аватар для Pingvinoff
60 / 60 / 11
Регистрация: 20.08.2014
Сообщений: 593
20.08.2014, 16:04     Создание объекта в функции и возврат объекта из нее #2
Наверное лучше возвращать указатель на объект...
MishaMoix
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 99
20.08.2014, 16:06  [ТС]     Создание объекта в функции и возврат объекта из нее #3
Я это понимаю, но все же вопрос остается открытым
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
20.08.2014, 16:17     Создание объекта в функции и возврат объекта из нее #4
Цитата Сообщение от Pingvinoff Посмотреть сообщение
Наверное лучше возвращать указатель на объект...
Ничуть не лучше, чем то, что предложил ТС.

MishaMoix, возвращать ссылку на локальный объект нельзя, так как после выхода из функции его уже не существует, а стало быть все ссылки и указатели на него недействительны.
Pingvinoff
 Аватар для Pingvinoff
60 / 60 / 11
Регистрация: 20.08.2014
Сообщений: 593
20.08.2014, 16:21     Создание объекта в функции и возврат объекта из нее #5
John Prick, да ладно, а написать так:
C++
1
2
3
       Object* a = new Object(/*параметры*/);
       ...............
       return new Object(a);
При условии, что есть нормальный конструктор копирования
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
20.08.2014, 16:28     Создание объекта в функции и возврат объекта из нее #6
Pingvinoff, ты здесь создал целых два объекта. Их, кстати, ещё нужно будет потом не забыть удалить.
Но дело не в этом, а в том, что ТС спрашивал нечто другое. Создание объекта динамически и возврат указателя на него - это не альтернатива возврату объекта из функции.
Цитата Сообщение от Pingvinoff Посмотреть сообщение
При условии, что есть нормальный конструктор копирования
При этом условии есть смысл возвращать объект по значению.
Pingvinoff
 Аватар для Pingvinoff
60 / 60 / 11
Регистрация: 20.08.2014
Сообщений: 593
20.08.2014, 16:41     Создание объекта в функции и возврат объекта из нее #7
John Prick, я не посмотрел код.... только текст.
MishaMoix
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 99
20.08.2014, 19:34  [ТС]     Создание объекта в функции и возврат объекта из нее #8
Т.е либо
C++
1
2
3
4
Object& smFun(){
  Object *c = new Object()
  return *c;
}
либо

C++
1
2
3
4
Object someFuncz(){
  Oblect a;
  return a;
}
При этом нужен копи конструктор.
Так получается?
Andrej
И целого heap'а мало
 Аватар для Andrej
93 / 54 / 9
Регистрация: 31.07.2014
Сообщений: 293
20.08.2014, 20:59     Создание объекта в функции и возврат объекта из нее #9
MishaMoix, возвращай объекты по значению. Все приличные компиляторы оптимизируют такие дела на раз-два.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2014, 21:15     Создание объекта в функции и возврат объекта из нее
Еще ссылки по теме:

C++ Возврат моего объекта List из функции
C++ Объявление класса, создание объекта и вызов функции-члена
C++ Виртуальная функция и возврат объекта класса

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DrOffset
6421 / 3795 / 878
Регистрация: 30.01.2014
Сообщений: 6,584
20.08.2014, 21:15     Создание объекта в функции и возврат объекта из нее #10
Цитата Сообщение от MishaMoix Посмотреть сообщение
C++
1
2
3
4
Object& smFun(){ 
    Object *c = new Object() 
    return *c; 
}
В этом случае таки лучше возвращать указатель, а не ссылку.
C++
1
2
3
Object * smFun(){ 
    return new Object();
}
А вообще да. Объекты лучше по значению - а дальше RVO возьмется за дело.
Yandex
Объявления
20.08.2014, 21:15     Создание объекта в функции и возврат объекта из нее
Ответ Создать тему
Опции темы

Текущее время: 00:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru