Форум программистов, компьютерный форум 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"); подробнее

Показать сообщение отдельно
hoggy
5229 / 2120 / 404
Регистрация: 15.11.2014
Сообщений: 4,812
Завершенные тесты: 1
23.11.2014, 01:57     Можно ли удалить объект экземпляра класса из самого себя?
Цитата Сообщение от DrOffset Посмотреть сообщение
Предлагаю почитать вот это.
Не интересно.

Цитата Сообщение от MrGluck Посмотреть сообщение
До тех пор, пока не произошло обращение по пустому указателю - он сам по себе не вызывает UB.
Никаких "если".

Кстати, вызов метода по невалидному указателю так же является UB

C++
1
2
some* p = nullptr;
p->work();
И не важно, трогает ли метод work данные-члены, или нет. Это все равно UB.

Однако UB не означает, что непременно программа должна рухнуть.
UB означает "поведение не определено". Другими словами никто вам больше ничего не гарантирует.
Вся ответственность полностью на плечах программиста.

Как программист, который знает что делает, вы можете рассуждать о любых возможных "если".
Это уже ваше личное дело. И даже если вы решили, что в данной ситуации беды не должно быть, от этого UB не перестает быть UB.

C++
1
2
3
4
5
6
7
// разыменовали указатель
struct sock *sk = tun->sk;  
…
 
if (!tun) //<--- компилятор выпилил проверку, потому что разменовывать невалидный указатель это UB
               // а значит tun всегда валиден, потому что чуть выше его разыменовывали
    return POLLERR;  // if tun is NULL return error
(ц)Знаменитый баг обнаруженный в коде Linux Kernel.

Цитата Сообщение от Убежденный Посмотреть сообщение
Пожалуйста, ссылку на пункт Стандарта (98-03-11 или выше),
Честно? Лень искать.

Если вам это интересно, то вы можете попробовать загуглить на хабре. Там вроде бы были какие то ссылки на стандарт.

Ну или вы можете проверить следующую информацию:

AC>Ну, помниться был такой классный топик, что-то типа NULL и this. И насколько я понимаю _НИГДЕ_ не написано что this _НЕ_МОЖЕТ_ быть нулевым. Разве что ((X*)0)->f имеет неопределённое поведение в общем случае и совершенно определённое для вызова невиртуальной функции по типу указателя для которого эта функция была определена. Тоесть явного запрета на 0 as this нигде нет. Так что насщёт хака можно и поспорить )))
Потому что этот запрет следует из двух положений:
1) 9.3.2/1 In the body of a nonstatic (9.3) member function, the keyword this is a non-lvalue expression whose value is the address of the object for which the function is called.
2) не существует объектов с адресом 0.
(ц)На киберфоруме запрещено делать ссылки на сторонние сайты.
 
Текущее время: 23:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru