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

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

20.08.2014, 15:56. Просмотров 2370. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
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
Pingvinoff
61 / 61 / 15
Регистрация: 20.08.2014
Сообщений: 593
20.08.2014, 16:04 2
Наверное лучше возвращать указатель на объект...
0
MishaMoix
1 / 1 / 1
Регистрация: 03.04.2012
Сообщений: 99
20.08.2014, 16:06  [ТС] 3
Я это понимаю, но все же вопрос остается открытым
0
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
20.08.2014, 16:17 4
Цитата Сообщение от Pingvinoff Посмотреть сообщение
Наверное лучше возвращать указатель на объект...
Ничуть не лучше, чем то, что предложил ТС.

MishaMoix, возвращать ссылку на локальный объект нельзя, так как после выхода из функции его уже не существует, а стало быть все ссылки и указатели на него недействительны.
0
20.08.2014, 16:17
Pingvinoff
61 / 61 / 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
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
20.08.2014, 16:28 6
Pingvinoff, ты здесь создал целых два объекта. Их, кстати, ещё нужно будет потом не забыть удалить.
Но дело не в этом, а в том, что ТС спрашивал нечто другое. Создание объекта динамически и возврат указателя на него - это не альтернатива возврату объекта из функции.
Цитата Сообщение от Pingvinoff Посмотреть сообщение
При условии, что есть нормальный конструктор копирования
При этом условии есть смысл возвращать объект по значению.
0
Pingvinoff
61 / 61 / 15
Регистрация: 20.08.2014
Сообщений: 593
20.08.2014, 16:41 7
John Prick, я не посмотрел код.... только текст.
0
MishaMoix
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
Andrej
И целого heap'а мало
95 / 56 / 17
Регистрация: 31.07.2014
Сообщений: 291
20.08.2014, 20:59 9
MishaMoix, возвращай объекты по значению. Все приличные компиляторы оптимизируют такие дела на раз-два.
1
DrOffset
10998 / 5869 / 1442
Регистрация: 30.01.2014
Сообщений: 9,469
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
20.08.2014, 21:15
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
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 - 2019, vBulletin Solutions, Inc.