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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MishaMoix
0 / 0 / 0
Регистрация: 03.04.2012
Сообщений: 99
#1

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

20.08.2014, 15:56. Просмотров 615. Ответов 9
Метки нет (Все метки)

Не могу разобраться с ссылками. Возможно ли вернуть из функции объект созданный в стеке при этом копи конструктор публичный.

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++ Требуется ли при удалении объекта посредством delete указывать тип объекта?
При возврате объекта из функции пишет, что для объекта не определен констуктор копирования C++
Возврат объекта класса из функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pingvinoff
61 / 61 / 12
Регистрация: 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
771 / 704 / 128
Регистрация: 27.07.2012
Сообщений: 2,015
Завершенные тесты: 3
20.08.2014, 16:17     Создание объекта в функции и возврат объекта из нее #4
Цитата Сообщение от Pingvinoff Посмотреть сообщение
Наверное лучше возвращать указатель на объект...
Ничуть не лучше, чем то, что предложил ТС.

MishaMoix, возвращать ссылку на локальный объект нельзя, так как после выхода из функции его уже не существует, а стало быть все ссылки и указатели на него недействительны.
Pingvinoff
61 / 61 / 12
Регистрация: 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
771 / 704 / 128
Регистрация: 27.07.2012
Сообщений: 2,015
Завершенные тесты: 3
20.08.2014, 16:28     Создание объекта в функции и возврат объекта из нее #6
Pingvinoff, ты здесь создал целых два объекта. Их, кстати, ещё нужно будет потом не забыть удалить.
Но дело не в этом, а в том, что ТС спрашивал нечто другое. Создание объекта динамически и возврат указателя на него - это не альтернатива возврату объекта из функции.
Цитата Сообщение от Pingvinoff Посмотреть сообщение
При условии, что есть нормальный конструктор копирования
При этом условии есть смысл возвращать объект по значению.
Pingvinoff
61 / 61 / 12
Регистрация: 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'а мало
93 / 54 / 9
Регистрация: 31.07.2014
Сообщений: 291
20.08.2014, 20:59     Создание объекта в функции и возврат объекта из нее #9
MishaMoix, возвращай объекты по значению. Все приличные компиляторы оптимизируют такие дела на раз-два.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2014, 21:15     Создание объекта в функции и возврат объекта из нее
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
DrOffset
6856 / 4067 / 927
Регистрация: 30.01.2014
Сообщений: 6,863
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     Создание объекта в функции и возврат объекта из нее
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru