Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 17.04.2016, 16:55   #31
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
оптимизация прошла.
почему в вижуале не прошла ?

почему тут операторы = выполняют разные функции

разве они не должны дублировать друг друга ?

Код:
ByteBuffer & operator = (ByteBuffer &a)
    {
    	cout<<"ca";
    	delete[] buffer;
    	buffer=new char[a.size];
    	memcpy(buffer,a.buffer,a.size);
    	size=a.size;
    	return *this;
    }
    ByteBuffer & operator = (ByteBuffer &&a)
    {
    	cout<<"ma";
    	delete[] buffer;
    	buffer=a.buffer;
    	a.buffer=nullptr;
    	size=a.size;
    	a.size=0;    
    	return *this;
    }
RAFA91 вне форума
Старый 17.04.2016, 16:57   #32
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
почему в вижуале не прошла ?
1. Потому что вы ее не включили
2. Потому что у вас его старая версия и там ее нет
3. Не смог просто

Цитата:
почему тут операторы = выполняют разные функции

разве они не должны дублировать друг друга ?
Нет. Это разные операторы. Один копирует, другой перемещает.
p51x вне форума
Старый 17.04.2016, 17:03   #33
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

в вижуале 10 это работает

Код:
		String & operator = (String &&s)
    {
    	cout << "operator move = "<<this<<" "<<&s<<endl;
		if (this == &s) return *this;
		delete [] buffer;
		buffer = new char[strlen(s.buffer)+1]; 
		strcpy(buffer,s.buffer);
		return *this;
   
 }
только все равно идет вызов копировщика
Изображения
Тип файла: jpg Б.JPG (31.4 Кб, 65 просмотров)
RAFA91 вне форума
Старый 17.04.2016, 17:06   #34
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Release режим включили?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума
Старый 17.04.2016, 17:07   #35
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

какой билд в студии активен?

у меня нет 2010 чтоб на ней тестировать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 17.04.2016, 17:12   #36
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

в общем все это в вижуале 10 работает.

что тут надо поменять


Код:
	String & operator = (String &&s)
    {
    	cout << "operator move = "<<this<<" "<<&s<<endl;
		if (this == &s) return *this;
		delete [] buffer;
		buffer = new char[strlen(s.buffer)+1]; 
		strcpy(buffer,s.buffer);
		return *this;
    }

	String(String && s)  
    {
		cout << "Constructor copy move "<<this<<" "<<&s<<endl;
		buffer = new char[strlen(s.buffer)+1]; 
		strcpy(buffer,s.buffer);
	}
Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Release режим включили?
вы о чем ?

у меня все стандартное
Изображения
Тип файла: jpg Б.JPG (32.2 Кб, 73 просмотров)
RAFA91 вне форума
Старый 17.04.2016, 17:17   #37
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вы открыли для себя, что зачатки С++11 начали реализовывать до 11 года? Ну откройте, что еще раньше это называлось С++0х, а также учтите, что все менялось и развивалось после 10ки.

Вы можете сформулировать ваш вопрос? О чем вообще последние посты?
p51x вне форума
Старый 17.04.2016, 17:23   #38
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
вы о чем ?

у меня все стандартное
Список рядом с зеленой кнопочкой...
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума
Старый 17.04.2016, 17:57   #39
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
он простой, но в принципе такой встретить реально
только там параметры нужно сделать const в конструкторе копий и операторе присваивания.
Но, если это сделать, то можно нарваться на сюрприз:
http://rextester.com/DZR43830
Как видим, второй (и последующие) элементы при реаллоке будут копироваться,
а не перемещаться. Многие штуки перемещают элементы только в том случае,
если перемещающий конструктор элементов не кидает исключений,
т.е. используют внутри не std::move, а std::move_if_noexcept.
Делаем перемещающие операции noexcept
http://rextester.com/FMDB9978
и получаем то, что хотели, теперь они все перемещаются.
Croessmah вне форума
Старый 20.04.2016, 16:56   #40
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

специально неделю не заходил сюда что-бы побольше накопилась познавательная инфа.

в итоге шыш.

повторюсь

как правильно написать это

выяснилось что && также показывает что это временной обьект.

Код:
String & operator = (String &&s)
    {
    	cout << "operator move = "<<this<<" "<<&s<<endl;
		if (this == &s) return *this;
		delete [] buffer;
		buffer = new char[strlen(s.buffer)+1]; 
		strcpy(buffer,s.buffer);
		return *this;
    }

	String(String && s)  
    {
		cout << "Constructor copy move "<<this<<" "<<&s<<endl;
		buffer = new char[strlen(s.buffer)+1]; 
		strcpy(buffer,s.buffer);
	}
RAFA91 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Условный оператор,оператор цикла и массив Klark73 Microsoft Office Excel 1 19.12.2011 17:09
Оператор выбора или условный оператор[Перенесено из JavaSE] merhaba1992 Помощь студентам 1 20.01.2011 17:06
Условный оператор. Оператор выбора. Pascal Сержuk Помощь студентам 4 17.11.2010 12:50
Вычислить используя, оператор цикла for и оператор безусловного пе Knubbe Помощь студентам 1 18.12.2009 10:24