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

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

Войти
Регистрация
Восстановить пароль
 
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
#1

Лишнее копирование - C++

19.03.2012, 19:08. Просмотров 403. Ответов 3
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
class A
{
    int data;
    double realData;
public:
    A(double r, int d): data(d), realData(r) {   }
    A operator + (const A& op) const { return A(data + op.data, realData + op.realData); }
};
void main()
{
    A a(A(5,acos(-1)) + A(5, log(2)));
}
Вот у меня такая хрень положим есть. При сумировании я сначала выписываю новые данные в новый экземпляр класса A и возвращаю его, после чего вызываю конструктор копирования при создании в мэйне объекта a. Как избежать лишнего копирования при сохранении ключевых моментов (код мэйна не меняется, для оператора + оба операнда const)?

Добавлено через 14 минут
вернее, я понимаю что можно возвращать A&, но ведь созданный в теле оператора + экземпляр живёт только в этом теле, соответственно это не безопасно
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2012, 19:08     Лишнее копирование
Посмотрите здесь:

C++ Вырезать из матрицы всё лишнее, чтобы осталась только закрашенная часть
C++ Программа работает, но выводит лишнее.
C++ Лишнее значение
C++ копирование
C++ Форматирование тексту + ошибки + лишнее
C++ Считывание из файла в char - при выводе выводится лишнее
fstream считывает лишнее C++
Лишнее считывание строк C++
копирование C++
C++ Лишнее удаление родителя при создании класса наследника
Выполняется лишнее прочтение файла C++
C++ Программа выводит лишнее число

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,515
19.03.2012, 19:12     Лишнее копирование #2
CEBEP, ну так оператор + по логике и должен возвращать копию. Вот оператор += уже не будет нуждаться в копии, используйте его (предварительно перегрузив для класса) если нужно экономить ресурсы.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
19.03.2012, 20:04  [ТС]     Лишнее копирование #3
копирования не избежать но дважды копировать...
igorrr37
 Аватар для igorrr37
1600 / 1228 / 121
Регистрация: 21.12.2010
Сообщений: 1,875
Записей в блоге: 7
19.03.2012, 21:25     Лишнее копирование #4
на mingw32-g++ конструктор копирования тут вообще не вызывается
http://msdn.microsoft.com/en-us/libr...8vs.80%29.aspx
Yandex
Объявления
19.03.2012, 21:25     Лишнее копирование
Ответ Создать тему
Опции темы

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