Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
1 / 1 / 1
Регистрация: 03.04.2012
Сообщений: 99
1

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

20.08.2014, 15:56. Просмотров 3432. Ответов 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();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2014, 15:56
Ответы с готовыми решениями:

Возврат объекта из функции
Здравствуйте. Написал в Code.Blocks на C++ вот такой код (привожу только часть кода, остальное на...

Возврат объекта класса из функции
Имеется следующий код: #include "stdafx.h" #include <iostream> using namespace std; ...

Возврат моего объекта List из функции
Ребята, вот есть у меня такой List: template<class T> class List { public: typedef T*...

Возврат и присвоение объекта из функции без копирования
Возможно ли в С++ вернуть объект (то есть записать данные объекта) напрямую в область памяти,...

9
62 / 62 / 15
Регистрация: 20.08.2014
Сообщений: 593
20.08.2014, 16:04 2
Наверное лучше возвращать указатель на объект...
0
1 / 1 / 1
Регистрация: 03.04.2012
Сообщений: 99
20.08.2014, 16:06  [ТС] 3
Я это понимаю, но все же вопрос остается открытым
0
842 / 773 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
20.08.2014, 16:17 4
Цитата Сообщение от Pingvinoff Посмотреть сообщение
Наверное лучше возвращать указатель на объект...
Ничуть не лучше, чем то, что предложил ТС.

MishaMoix, возвращать ссылку на локальный объект нельзя, так как после выхода из функции его уже не существует, а стало быть все ссылки и указатели на него недействительны.
0
62 / 62 / 15
Регистрация: 20.08.2014
Сообщений: 593
20.08.2014, 16:21 5
John Prick, да ладно, а написать так:
C++
1
2
3
       Object* a = new Object(/*параметры*/);
       ...............
       return new Object(a);
При условии, что есть нормальный конструктор копирования
0
842 / 773 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
20.08.2014, 16:28 6
Pingvinoff, ты здесь создал целых два объекта. Их, кстати, ещё нужно будет потом не забыть удалить.
Но дело не в этом, а в том, что ТС спрашивал нечто другое. Создание объекта динамически и возврат указателя на него - это не альтернатива возврату объекта из функции.
Цитата Сообщение от Pingvinoff Посмотреть сообщение
При условии, что есть нормальный конструктор копирования
При этом условии есть смысл возвращать объект по значению.
0
62 / 62 / 15
Регистрация: 20.08.2014
Сообщений: 593
20.08.2014, 16:41 7
John Prick, я не посмотрел код.... только текст.
0
1 / 1 / 1
Регистрация: 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;
}
При этом нужен копи конструктор.
Так получается?
1
И целого heap'а мало
95 / 56 / 17
Регистрация: 31.07.2014
Сообщений: 291
20.08.2014, 20:59 9
MishaMoix, возвращай объекты по значению. Все приличные компиляторы оптимизируют такие дела на раз-два.
1
13474 / 7137 / 1712
Регистрация: 30.01.2014
Сообщений: 11,931
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 возьмется за дело.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2014, 21:15

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как правильно вызывать функцию объекта из другой функции того же объекта?
Доброго дня и ночи, уважаемые программисты! Существует некоторая проблема, на которую я наткнулся,...

При возврате объекта из функции пишет, что для объекта не определен констуктор копирования
Пишу шаблонный класс матриц. Делаю, значит, переопределение оператора + для двух матриц одного...

Какие компонентные функции отвечают за создание объекта?
Какие компонентные функции отвечают за создание объекта? Такой вопрос, может кто ответить?:) я не...

Возврат объекта функцией
class C { int c; }c1,c2; C func() { return c1; }


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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