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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти количество чисел в массиве типа char http://www.cyberforum.ru/cpp-beginners/thread1303976.html
задание полностью стоит следующее: в массиве типа char вывести только те слова, которые состоят из латинских букв и вывести количество чисел в массиве, если такие имеются. Числе, не цифр!...
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; //визначення перелічуваного типу...
Обработка двумерного массива: найти количество строк и номер столбца по условию 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>... подробнее

Показать сообщение отдельно
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3969 / 2193 / 553
Регистрация: 18.10.2014
Сообщений: 3,802
24.11.2014, 10:10
Цитата Сообщение от hoggy Посмотреть сообщение
Кстати, вызов метода по невалидному указателю так же является UB
C++
1
2
some* p = nullptr;
p->work();
И не важно, трогает ли метод work данные-члены, или нет. Это все равно UB.
Это на самом деле еще вилами по воде писано. Стандарт языка С++ изначально содержал дефект, согласно которому в нескольких местах стандарта упоминалось неопределенное поведение при разыменовании нулевого указателя, но при этом в описании унарного оператора '*' такое не декларировалось. Упоминания такого разыменования в качестве примеров UB были удалены из стандарта. Однако финального решения на тему того, можно ли разыменовывать нулевой указатель пока, похоже, не вынесено.

Эта тема много обсуждалась комитетом

http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#315
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#232
(и по ссылкам)

Однако утверждение о том, что 'delete this' внутри метода класса порождает UB совершенно не верно. Все требования на валидность указателя 'this' относятся к явному или неявному использованию 'this' в выражениях. Никакого абстрактного требования чтобы 'this' был "просто так" всегда валиден в языке нет.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.