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

Конструкторы копии и перемещения - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу замены во введенной строке малых букв b на заглавные http://www.cyberforum.ru/cpp-beginners/thread791565.html
Написать программу замены во введенной строке малых букв b на заглавные Прикрепляю фото, на нём хорошо видно саму программу и результат, который мне совершенно непонятен. Откуда эти странные...
C++ Игра крепс, выполняемая 1000 раз, не запускается Написал программу игры в крепс, выполняемая 1000 раз. Компилятор ошибок никаких не выдает. При запуске выходит исключение, помогите найти ошибку #include<iostream> #include<cstdlib>... http://www.cyberforum.ru/cpp-beginners/thread791548.html
непонятки с указателями C++
Добрый день! изучаем плюсы, наткнулся на одну странную ситуацию, не могу сообразить, в чём дело... :( Есть структура - Point (точка). Есть класс, содержащий указатель на эту структуру......
как в си ++ придать макс и мин значения вводимому числу C++
Ребята я новичек в си ++ вот задача к примеру с датами связана как зделать так чтобы при вводе даты (почисленно)ее ограничить,к примеру чтобы вводимый месяц было число от 1 до 12,день от 1 до 31???...
C++ Написать игру. В верхней части экрана летят 3 «звездочки»(***). В нижнем правом углу экрана находиться буква «О» http://www.cyberforum.ru/cpp-beginners/thread791486.html
Написать игру. В верхней части экрана летят 3 «звездочки»(***). В нижнем правом углу экрана находиться буква «О». После нажатия любой клавиши она движется вверх. Нужно попасть буквой «O» в среднюю...
C++ Сожмите массив, выбросив каждый третий его элемент, без использования дополнительного массива 3. Дан массив из n элементов. Сожмите массив, выбросив каждый третий его элемент, без использования дополнительного массива. Выведите на экран исходный и измененный массивы. Помогите кто сможет... подробнее

Показать сообщение отдельно
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1

Конструкторы копии и перемещения - C++

21.02.2013, 14:15. Просмотров 780. Ответов 2
Метки (Все метки)

Объясните, пожалуйста, следующее поведение.
Итак, есть 4 кода:
1:
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
35
36
37
38
39
40
#include <iostream>
#include <string>
 
 
int i;
 
class mClass {
 public:
   mClass( const mClass &orig ) {
       std::cout << ++i << " copy ctor of: " << orig.s << std::endl;
      
       s = "copy of " + orig.s;
   }
   
   mClass( const char *str )
      : s( str ) 
   {
      std::cout << ++i << " ctor: " << s << std::endl;
   }
   
   ~mClass() {
      std::cout << ++i << " dtor: " << s << std::endl;
   }
   
   std::string s;
};
 
mClass f() {
   return mClass( "func" );
}
 
int main() {
   {
      mClass a( f());
      
      std::cout << a.s << std::endl;
   }
   
   return 0;
}
2-ой код отличается от первого только функцией f():

C++
1
2
3
4
5
mClass f() {
   mClass c( "func" );
   
   return c;
}
3 и 4 коды отличаются от 1 и 2 соответственно только наличием конструктора перемещения, хотя, в принципе, они только для проверки теории.
Собственно конструктор перемещения:

C++
1
2
3
4
5
   mClass( mClass &&toMove ) {
      std::cout << ++i << " move ctor: " << toMove.s << std::endl;
      
      s = "moved " + toMove.s;
   }
Выводы из консолей:
1 код:
GCC 4.7.2 ( MinGW ):
Код
1 ctor: func
func
2 dtor: func
VS 2010:
Код
1 ctor: func
func
2 dtor: func

2 код:
GCC 4.7.2 ( MinGW ):
Код
1 ctor: func
func
2 dtor: func
VS 2010:
Код
1 ctor: func
2 copy ctor of: func
3 dtor: func
copy of func
4 dtor: copy of func

3 код:
GCC 4.7.2 ( MinGW ):
Код
1 ctor: func
func
2 dtor: func
VS 2010:
Код
1 ctor: func
func
2 dtor: func

4 код:
GCC 4.7.2 ( MinGW ):
Код
1 ctor: func
func
2 dtor: func
VS 2010:
Код
1 ctor: func
2 move ctor: func
3 dtor: func
moved func
4 dtor: moved func
Ключи компиляции GCC для 1 и 2: g++ -O0 main.cpp -o main
для 3 и 4 дополнительный ключ -std=c++11

Для VS использовался пустой проект, компиляции в конфигурации Debug, в подробности выставленных ключей не вдавался.

Собственно я не пойму, почему GCC так избегает конструктор копии и перемещения? Как, собственно, он вообще инициализирует объект в main? Я так же пробовал создавать объект в main в куче, результат тот же.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru