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

Incomplite type delete - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В последовательности найти числа, которые близки к числам другой последовательности http://www.cyberforum.ru/cpp-beginners/thread1586240.html
даны две последовательности чисел A = {a1, a2,…, an}, B = {b1, b2, …, bn},напечатать те и только те числа aj из последовательности A, для которых в последовательности B оказывается число bк такое,...
C++ Вывести список запущенных процессов в порядке присвоенного им ID Доброго времени суток. Подскажите как решить задачу. Разработка программы, выводящей список запущенных процессов в порядке присвоенного им ID(по возрастанию), в ОС семейства Windows http://www.cyberforum.ru/cpp-beginners/thread1586239.html
Найти в каждой строке матрицы максимальный элемент C++
Дано массив А . Нужно найти с каждой строки максимальный элемент , с каждого столбца минимальный элемент
C++ Выбор языка
Здравствуйте,подскажите пожалуйста какой язык наиболее подойдет для реализации. Цель: Нужна чтобы программа работала на windows(xp,7) Для работы программы не ну нужны библиотеки(Например для...
C++ Вывод на экран содержимое файла http://www.cyberforum.ru/cpp-beginners/thread1586224.html
Как исправить команду, не выводит файл? #include <stdio.h> #include <conio.h> #include <iostream.h> #include <windows> #include <string.h> #include <fstream.h> int main () {
C++ Вычислить интеграл методом Монте-Карло \int \int_{G}^{}\ln(1 + {x}^{2} + {y}^{2})dxdy , G: {x}^{2} + {y}^{2} <= {a}^{2} (R: \pi ) подробнее

Показать сообщение отдельно
rikimaru2013
C++ Game Dev
2435 / 1129 / 240
Регистрация: 30.11.2013
Сообщений: 3,686

Incomplite type delete - C++

19.11.2015, 17:58. Просмотров 225. Ответов 3
Метки (Все метки)

Добрый вечер,

пытаюсь постичь смысл UB стандарта
if the object being deleted has incomplete class type at the point of deletion and the complete class has a non-trivial destructor or a deallocation function, the behavior is undefined.

Github source: here
Таблетка от UB:
C++
1
2
3
4
5
 
~scoped_ptr() {
    enum { type_must_be_complete = sizeof(C) };
    delete ptr_;
  }
Пример:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
class A;
class B
{
private:
    A* m_ptr;
public:
    void f()
    {
        //enum { type_must_be_complete = sizeof(A) };
        delete m_ptr;
    }
};
 
 
int main()
{
    B b;
    b.f();
}





Тобишь при delete ptr_; компилятор не тратит ресурсы на проверку "завершенности типа", так как деструктор не описан, он не виртуал и связать место удаление можно на этапе компиляции с кодом деструктора (уже описанного типа где бы он не лежал в cpp'шниках) - и отсюда UB. Так вот я не могу понять почему никто не ругается, что класс incomplite и спокойно связывает его с описанным телом деструктора.

А строка, если добавить, в мой пример:
C++
1
*m_ptr = 10;
Скажет, что нельзя произвести операцию присваения немодифицироваемому элемменту - но не слово про incomplite type.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru