С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

19.03.2012, 19:08. Просмотров 439. Ответов 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&, но ведь созданный в теле оператора + экземпляр живёт только в этом теле, соответственно это не безопасно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2012, 19:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Лишнее копирование (C++):

Лишнее значение - C++
И снова здравствуйте. Задача такова: программа должна отображать у левого края сплошной квадрат из звездочек с заданной стороной. ...

fstream считывает лишнее - C++
fstream считывает лишнее символы. Не пойму в чём проблема #include<iostream> #include<fstream> using namespace std; int main...

Лишнее считывание строк - C++
Всем доброго вечера! Как всегда, избитая тема про потоки cin/cout. Предположим, в следующем формате пишется часть кода: ...

Программа работает, но выводит лишнее. - C++
Уделение элементов в массиве, расположенных между максимальным и минимальным элементом: #include <stdio.h> #include <conio.h> ...

Выполняется лишнее прочтение файла - C++
Добрый вечер, проблема такая, цикл while (!file.eof()) выполняется на одну итерацию больше положенного, пробовал менять условие...

Форматирование тексту + ошибки + лишнее - C++
Вот задача + решение // xz.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include...

3
Gepar
1178 / 534 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
19.03.2012, 19:12 #2
CEBEP, ну так оператор + по логике и должен возвращать копию. Вот оператор += уже не будет нуждаться в копии, используйте его (предварительно перегрузив для класса) если нужно экономить ресурсы.
0
CEBEP
107 / 107 / 9
Регистрация: 21.03.2010
Сообщений: 444
19.03.2012, 20:04  [ТС] #3
копирования не избежать но дважды копировать...
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
19.03.2012, 21:25 #4
на mingw32-g++ конструктор копирования тут вообще не вызывается
http://msdn.microsoft.com/en-us/library/ms364057%28vs.80%29.aspx
1
19.03.2012, 21:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2012, 21:25
Привет! Вот еще темы с ответами:

Программа выводит лишнее число - C++
Текст задачи: В двух словах о проблеме: По идее в первую строку выходного файла OUTPUT.TXT нужно вывести числа, которые соответствуют...

Считывание из файла в char - при выводе выводится лишнее - C++
Считываю из файла в строку типа char, если у меня в строке меньше 16 символов, то при выводе выводится какой-то мусор, наверное связано с...

Лишнее удаление родителя при создании класса наследника - C++
Не могу понять откуда в выводе программы появляется первая надпись "delete A". По идее надписей "delete" должно быть столько же, сколько и...

Вырезать из матрицы всё лишнее, чтобы осталась только закрашенная часть - C++
Как можно вырезать из матрицы всё лишнее, чтобы осталась только закрашенная часть?


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

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

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