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

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

Войти
Регистрация
Восстановить пароль
 
chernovan
0 / 0 / 0
Регистрация: 29.08.2013
Сообщений: 5
#1

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

14.12.2014, 22:29. Просмотров 282. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Один и тот же объект в одном выражении модифицируется несколько раз - неопределенное поведение (C++):

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

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

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

Неопределенное поведение С++ - C++
Вот такой вопрос: что из этого обязательно вызовет неопределенное поведение ? 1) Разыменование нулевого указателя 2) Выход за...

Создание массива, неопределенное поведение - C++
Пишу такой код: #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using namespace std; struct GL{ GL () { } virtual...

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

2
Mr.X
Эксперт С++
3060 / 1705 / 265
Регистрация: 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 - C++
Писал программу для сложения больших чисел (в файле содержатся числа с количеством цифр от 1 до 30). При запуске через компилятор всё...

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

Неопределенное поведение при приведении типа - C++
Суть проблемы в том что, после принудительного приведения типа деструктор наследника не вызывается, вызывается деструктор базового типа.Но...

Найти слово, один и тот же символ в котором встречается максимальное число раз - C++
длина входной строки не превосходит 300 символов, она вводится с консоли. Вам необходимо вывести на консоль либо преобразованную строку,...


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

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

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