Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
chernovan
0 / 0 / 0
Регистрация: 29.08.2013
Сообщений: 5
1

Один и тот же объект в одном выражении модифицируется несколько раз - неопределенное поведение

14.12.2014, 22:29. Просмотров 301. Ответов 2
Метки нет (Все метки)

Уважаемые форумчане! Недавно столкнулся с интересным на мой взгляд необычным поведением компилятора c++ от keil. Определил класс шаблон TVector в котором определил конструкторы: TVector (), TVector(T *arr,uint16_t len), TVector (TVector<T> &T); operator =(TVector<T> &T), Все работало на ура пока случайно не написал конструкцию TVector<char> sv=sv=TVector<char>("test string",11) столкнулся с утечкой памяти и начал разбираться в чем дело, прологировал вызов конструкторов и оператора =, оказалось что кроме созданного объекта конструкторомTVector<char>("test string",11) создается промежуточный объект TVector при создании которого не вызывается ни один конструктор и он соответсвенно не разрушается после выполнения этой конструкции, вариантsv=TVector<char>("test string",11) , работает вызывается конструкто один раз (как я понял оптимизация ведь без нее должен вызваться еще конструктор копирования и деструктор временного объекта). Уважаемые ГУРУ прошу вас разъяснить столь странное поведение компилятора.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2014, 22:29
Ответы с готовыми решениями:

Как использовать один и тот же case в switch несколько раз?
Как использовать один и тот же case в switch несколько раз?

Несколько new на один и тот же указатель
char* p; p = new char; strcpy(p, &quot;june&quot;); cout &lt;&lt; p &lt;&lt; endl; p = new char;...

Как использовать один и тот же объект в разных классах?
Подскажите, пожалуйста, как получить доступ к функции через объект. Второй день...

Неопределенное поведение С++
Вот такой вопрос: что из этого обязательно вызовет неопределенное поведение ?...

Вывести числа, которые встречаются в массиве несколько раз / один раз
дан массив состоящий из 100 целых чисел. а)Вывести все числа,которие...

2
Mr.X
Эксперт С++
3183 / 1710 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
14.12.2014, 23:03 2
Цитата Сообщение от chernovan Посмотреть сообщение
TVector<char> sv=sv=TVector<char>("test string",11)
Один и тот же объект в одном выражении модифицируется несколько раз, что по стандарту недопустимо и влечет неопределенное поведение, чего вы, собственно, и хлебнули.
1
chernovan
0 / 0 / 0
Регистрация: 29.08.2013
Сообщений: 5
15.12.2014, 06:45  [ТС] 3
Большое спасибо за ответ. Теперь я спокоен то есть это и есть случай Unspecified behavior. А вот warning не генериться компилятором. Ну это уже вопросы к компилятору.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2014, 06:45

Неопределенное поведение в Debug и Release
Писал программу для сложения больших чисел (в файле содержатся числа с...

Неопределенное поведение пользовательской функции
значит писал для лабы вот такой код: town.h #include &lt;Windows.h&gt; #include...

Создание массива, неопределенное поведение
Пишу такой код: #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using namespace...


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

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

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