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

Можно ли удалить объект экземпляра класса из самого себя? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти количество чисел в массиве типа char http://www.cyberforum.ru/cpp-beginners/thread1303976.html
задание полностью стоит следующее: в массиве типа char вывести только те слова, которые состоят из латинских букв и вывести количество чисел в массиве, если такие имеются. Числе, не цифр! #include<iostream> #include<string.h> #include <stdlib.h> using namespace std; int main() { char text;//ñòðîêà
C++ Удалить элементы главной диагонали Удалить элементы главной диагонали Почему не работает? for (i=0; i<n; i++) for (j=0; j<m-1; j++) if (i=j) for (i=j; i<n-1; i++) mas=mas; cout<<"our array\n"; http://www.cyberforum.ru/cpp-beginners/thread1303975.html
Создание, просмотр и удаление элементов списка, организованного по принципу LIFO C++
Что делать? Программа просит идентификатор true, false. #include "stdafx.h" #include <iostream> #include <process.h> #include <conio.h> using namespace std; //визначення перелічуваного типу користувача boolean enum boolean(true, false); //визначення шаблону елемента списку за допомогою типу struct struct stack{
Обработка двумерного массива: найти количество строк и номер столбца по условию C++
#include <iostream> #include <iomanip> using namespace std; const int N=20; const int M=20; int main() { double a;
C++ Подскажите.Как вывести N-ую строку или столбец из матрицы? http://www.cyberforum.ru/cpp-beginners/thread1303921.html
Подскажите.Как вывести N-ую строку или столбец из матрицы?
C++ Ошибка "stack around the variable 'n' was corrupted." Есть такая программа. Натуральные числа от 0 до n(a0-an) Необходимо найту сумму всех чисел кратных 5. Выдает ошибку stack around the variable 'n' was corrupted. Почему? #include <clocale> #include <cstdio> int main(){ setlocale(LC_ALL, "Russian"); int n, a, sum=0; printf("введите n"); подробнее

Показать сообщение отдельно
DrOffset
6929 / 4122 / 942
Регистрация: 30.01.2014
Сообщений: 6,915
23.11.2014, 16:15     Можно ли удалить объект экземпляра класса из самого себя?
Цитата Сообщение от hoggy Посмотреть сообщение
Все что вам нужно - это понять логику компилятора: на каком основании он имеет право оптимизировать проверку if ( !this
Логику компилятора я понимаю, а вот твою - нет. Причем тут сравнение this с нулем? По поводу сравнения this с нулем вопросов вообще нет, я уже об этом писал. Вместо объяснения элементарных вещей, лучше бы привел все-таки ссылку на стандарт, раз ты так уверен в своих словах.

Цитата Сообщение от hoggy Посмотреть сообщение
Оптимизирующий компилятор закладывается на то, что this всегда валидный (иначе - это UB).
А значит делать проверку не обязательно.
И выпиливает её.
this не становится равным нулю после выполнения delete, delete вообще не меняет значение указателя, который ему передали, delete работает с копией (даже если забыть, что this - константен). Не нужно приводить в пример сравнение this с нулем, это не относится к обсуждаемому вопросу. Лучше приведи в пример цитату из стандарта, из которой следует, что конструкция delete this - UB. То, что эта конструкция в определенных случаях может привести к UB - это понятно и без того. В С++ вообще много какие конструкции при неправильном использовании могут привести к UB, так уж устроен язык. Но мы, опять же, не об этом. Использование delete для стековых объектов, использование объекта после вызова delete - это все те же самые варианты UB, которые существуют независимо от того используем ли мы delete this или нет. Нужен неоспоримый факт, подтверждающий твои слова о том, что delete this - это всегда UB, независимо от контекста применения. Именно с этим (выделенным) все тут несогласны, именно этот тезис нуждается в подтверждении.

Давай я последний раз спрошу, если ты уверен в своих словах, смысловой эквивалент этой фразы из спецификации языка привести сможешь? Ты его приводишь, мы все дружно переосмысливаем свое мировосприятие и расходимся. Иначе толку в этом разговоре - нет.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru