С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Внедрение DLL в EXE https://www.cyberforum.ru/ cpp/ thread1787895.html
Здравствуйте, хочу написать свой объединитель exe и dll. Подскажите, как это можно сделать так, чтобы можно было при запуске использовать dll без записи на диск
Как создать оконную программу на c++ exe C++
Можно по подробние как создать оконную программу на c++ exe . Я только что перешол на c++ из Bash (cmd , bat , командная строка ) и как то не хочется опять возвращатся к консольным программам . Я незнаю еще не каких команд для C++ и не знаю не каких компеляторов но хотелось бы создать хотяюы самую простую оконную программу без всяких функций что бы просто открылось пустое окно . Вы поможите ? И...
C++ Не выделяется память https://www.cyberforum.ru/ cpp/ thread1787351.html
Здравствуйте, пытаюсь выделить память, на одном компьютере работает, на другом нет, возвращает 0x00000000, хотя память имеется в наличии. В чём может быть причина? size_t size = 1586753967; void* b = malloc(size); free(b); Добавлено через 6 минут errno = ENOMEM, хотя памяти доступно 4,2 ГБ Добавлено через 2 минуты
C++ Стек и куча https://www.cyberforum.ru/ cpp/ thread1786739.html
Вот говорят, что для стека доступного места меньше, чем для кучи. И если есть много переменных большого размера, то лучше создавать их через new. а почему так?
Программа для отправки сообщения C++
Привет всем. Может кто помочь? Задача следующая. Есть сервер, к которому подключается 10 человек. На этом сервере лежат 10 именных папок (по имени участника). Когда кто-то один из участников перекидывает со своей папки второму участнику, то в это время второму участнику должно автоматически прийти сообщение на почту, что "в такое время, такой участник перекинул вам файл." Как можно сделать...
C++ Побитовый сдвиг с заполнением нулями Как реализовать побитовый сдвиг с заполнением нулями, есть такой код на JS for (var b = 0; 256 > b; b++) { for (var c = b, d = 0; 8 > d; d++) c = c & 1 ? c >>> 1 ^ 3988292384 : c >>> 1; m.crc_table = c } https://www.cyberforum.ru/ cpp/ thread1786560.html
C++ Это что за паттерн? https://www.cyberforum.ru/ cpp/ thread1786559.html
Вообщем писал я код писал и наваял нечто такое: #include <iostream> #include <memory> //====================================================================== class Base { public:
C++ Ошибка сегментирования при доступе к переменным класса
Имею: - CentOS - gcc 4.8 - Собственный класс - В этом классе есть объект = указатель на другой класс (назовем его log). - В log есть ряд переменных в private - Для получения их значений создаю ряд методов get....value() Проблема. В определенных местах кода, при вызове get...value() получаю ошибку сегментирования. Ссылка на класс 100% рабочая. Ошибка вылетает исключительно только...
C++ Где взять Gprof под windows? https://www.cyberforum.ru/ cpp/ thread1786193.html
Где можно найти gprof под windows. Не смог найти, файл gnome.out сгенерировался, а как его проанализировать?
C++ Программа - роутер, раздающая wi-fi с ноута ПРЕДИСЛОВИЕ Здравствуйте! Есть задача написать простенькую программа которая раздает wi-fi с ноута с помощью команды nesth или чего-нибудь другого, если оно вообще есть. Я уже писал такую программку, но только на pascal. Довольно примитивная, со скудным функционалом, однако функцию свою выполняет. uses crt,sysutils,dos,mouse; const nf='WiFiCFG.bat'; var x1,y1,x2,y2,i:integer; https://www.cyberforum.ru/ cpp/ thread1786000.html
C++ Является ли адаптер контейнера контейнером
75%, но некоторые вопросы вызывают недоверие. Например вопрос про стандартные контейнеры (нужно выбрать стандартные контейнеры из списка), один из вариантов std::queue, вот и думай - то ли автор вопроса плохо знает С++ и нужно выбрать std::queue, то ли автор знает С++ на достаточном уровне и std::queue выбирать не надо (т.к. это не контейнер, а адаптер). Другие вопросы тоже можно покритиковать. ...
C++ Ищу описание Pocketsphinx https://www.cyberforum.ru/ cpp/ thread1784787.html
Можете дать хорошее описание ( туториал ) по pocketsphinx. Просто у меня весьма туго с английским
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
01.08.2016, 20:51 0

С++ идиомы - C++ - Ответ 9420896

01.08.2016, 20:51. Показов 118724. Ответов 34
Метки (Все метки)

Ответ

Checked delete

Цель:
Повышение безопасности при использовании delete expression.

Мотивация и пример проблемного кода:
Стандарт C++ (пункт 5.3.5/5) позволяет использовать в delete-expression указатель на не полный тип, но при этом, если деструктор или функция освобождения памяти объекта не являются тривиальными, то это приведет к неопределенному поведению.
Цитата Сообщение от 5.3.5/5
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.
Некоторые компиляторы в таком случае выдают предупреждение, но могут этого и не сделать, либо программист может игнорировать или отключить предупреждения.

В следующем примере в main.cpp определяется объект типа Object. В функции main() вызывается функция delete_object(), определенная в deleter.cpp, где нет определения класса Object, а есть лишь его объявление.
Вызов delete в данной функции приводит к неопределенному поведению.
C++
1
2
3
4
5
6
////////////////////
// File: deleter.hpp
////////////////////
// Объявляем Object, но не определяем его
struct Object;
void delete_object(Object* p);
C++
1
2
3
4
5
6
7
////////////////////
// File: deleter.cpp
////////////////////
#include "deleter.hpp"
 
// Удаляем объект типа Object, не имея его определения
void delete_object(Object* p) { delete p; }
C++
1
2
3
4
5
6
7
8
9
10
11
////////////////////
// File: object.hpp
////////////////////
struct Object
{
  //Этот деструктор не будет вызван при удалении, 
  //если не будет определения типа при вызове delete
  ~Object() {
     // ...
  }
};
C++
1
2
3
4
5
6
7
8
9
10
////////////////////
// File: main.cpp
////////////////////
#include "deleter.hpp"
#include "object.hpp"
 
int main() {
  Object* p = new Object;
  delete_object(p);
}
Решение и пример кода:
Идиома checked delete полагается на вызов шаблонной функции для удаления объекта, а не на прямой вызов delete, который может привести к неопределенному поведению для объявленных, но неопределенных типов.
Ниже приводится реализация шаблонна функции boost::checked_delete из Boost Utility library.
Её использование вызывает ошибку компиляции при использовании sizeof для параметра шаблона T, если T - не полный тип.
Если T объявлен, но не определен, то sizeof(T) будет генерировать ошибку компиляции или возвращать нулевое значение, в зависимости от компилятора.
Если sizeof(T) вернет ноль, то произойдет ошибка компиляции, т.к. объявляется массив с отрицательным количеством элементов (-1). Имя type_must_be_complete в данном случае появляется в сообщении об ошибке и позволяет понять что произошло.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template<class T> 
inline void checked_delete(T * x)
{
    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
    (void) sizeof(type_must_be_complete);
    delete x;
}
template<class T> 
struct checked_deleter : std::unary_function <T *, void>
{
    void operator()(T * x) const
    {
        boost::checked_delete(x);
    }
};
Примечание: этот метод также применим к delete[].

Предупреждение: std::auto_ptr не использует никакого эквивалента checked delete. Поэтому инстанцирование std::auto_ptr с неполным типом может привести к неопределенному поведению в деструкторе, если в момент объявления std::auto_ptr тип параметра шаблона определен не полностью.

Вернуться к обсуждению:
С++ идиомы C++
12
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2016, 20:51
Готовые ответы и решения:

С++ идиомы - обсуждение
Тема создана для вопросов и обсуждений С++ идиом

Как и какие идиомы и паттерны можно (и лучше) применять?
Здравствуйте. Писал я проги для себя ну и так по мелочи, для абы кого, да и проги абы как, не...

Идиомы программирования
диома программирования — это некоторое часто применяемое действие в прораммировании. Это самый...

Английские идиомы: как правильно перевести in its own right?
Как правильно перевести in its own right? Например, вот в таком контексте: Добавлено через 3...

34
01.08.2016, 20:51
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru