Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 11

Не работает возврат ссылки на объект

31.03.2018, 21:24. Показов 1078. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть простой класс с двумя полями и одним методом, который печатает их. Функция generate() создаёт объект и ссылку на него, которую возвращает. При этом вот этот код почему-то не выводит нормальные значения. Хотя даже отладчик показывает, что ref содержит x=5 и y=5.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
class object
{
private:
    int x, y;
public:
    object(int x, int y)
    {
        this->x = x;
        this->y = y;
    }
    void print()
    {
        std::cout << x << " " << y << std::endl;
    }
};
 
object &generate(int x, int y)
{
    object objG(x, y);
    object &ref = objG;
 
    return ref;
}
 
int main()
{
    generate(5, 5).print();
 
    system("pause");
    return 0;
}
Но этот код выводит всё правильно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
class object
{
private:
    int x, y;
public:
    object(int x, int y)
    {
        this->x = x;
        this->y = y;
    }
    void print()
    {
        std::cout << x << " " << y << std::endl;
    }
};
 
object &generate(int x, int y)
{
    object objG(x, y);
    object &ref = objG;
 
    return ref;
}
 
int main()
{
    object ob1 = generate(5, 5);
    ob1.print();
 
    system("pause");
    return 0;
}
Помогите разобраться с ссылками.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.03.2018, 21:24
Ответы с готовыми решениями:

Возврат ссылки
Задача которая считывает массив и определяет минимальный, макисмальный, первый отрицательный элемент, и их индексы. По заданию надо ее...

Возврат r-ссылки
Здравствуйте У меня вопрос, не могу понять почему так происходит Знаю, это бессмысленный код, он просто как пример, что бы разобраться ...

Возврат ссылки
int &amp; function(int); Понятно для чего передают аргументы в функцию как указатели или ссылки.Но зачем функция возвращает ссылку? Чтобы...

4
Модератор
Эксперт С++
 Аватар для zss
13778 / 10971 / 6491
Регистрация: 18.12.2011
Сообщений: 29,258
31.03.2018, 21:31
Лучший ответ Сообщение было отмечено Ем детей как решение

Решение

Нельзя возвращать ссылку на временный объект: после выхода из функции он не существует.
Можно, например, так:
C++
1
2
3
4
5
6
7
8
9
10
object &generate(int x, int y, object& z)
{
    object objG(x, y);
    z = objG;
    return z;
}
int main()
{
    object a;
    generate(5, 5,a).print();
1
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
31.03.2018, 21:40
Цитата Сообщение от zss Посмотреть сообщение
он не существует
наверное, может существовать, а может и не существовать, у меня предупреждает, но компилится и даже исполняется.

как вариант возвращать ссылку?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
class object {
private:
    int x, y;
public:
    object(int x, int y) : x(x), y(y) {}
    void print() { std::cout << x << " " << y << std::endl; }
};
 
object* generate(int x, int y) {
    auto *objG = new object(x, y);
    return objG;
}
 
int main()  {
    object* obj = generate(5, 5);
    obj->print();
 
    delete obj;
    return 0;
}
1
Модератор
Эксперт С++
 Аватар для zss
13778 / 10971 / 6491
Регистрация: 18.12.2011
Сообщений: 29,258
31.03.2018, 22:14
Цитата Сообщение от Jabbson Посмотреть сообщение
как вариант возвращать ссылку
Судя по коду, Вы имеете ввиду "возвращать указатель"...
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
31.03.2018, 22:16
пардон, как выучил на английском поинтеры и референсы, так путаю их русские эквиваленты Все верно, указатель.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.03.2018, 22:16
Помогаю со студенческими работами здесь

Возврат указателя на локальный объект
Доброго дня! Заинтересовал процесс возврата указателя на локальный объек, а именно: char* fun() { char *ptr1 = &quot;Hello...

Возврат ссылки из функции
Изучаю С++, знаю С. Вот такой простенький вопросик есть. В чем вообще разница: class Str { public: Str func() {return...

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

Возврат ссылки из метода
Доброго времени суток! Дано: структура: struct Point { float x; float y; float z; }; класс:

Возврат указателя на внутренний объект класса
Добрый день! Имеется следующая структура: class A{}; class B : public A{}; class C


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru