Десять возможностей C++11, которые должен использовать каждый C++ разработчик
Сегодня в программе:
auto
nullptr
- range-based циклы
override
иfinal
- строго-типизированный
enum
- интеллектуальные указатели
- лямбды
- non-member
begin()
иend()
static_assert
и классы свойств- семантика перемещения
Как обеспечить надлежащее пересечение границ динамической библиотеки, используя пользовательские средства удаления смарт-указателей
new
должно вообще исчезнуть (ну, по крайней мере, когда в С++14 пофиксят отсутствие std::make_unique
). Все динамические выделения памяти должны быть инкапсулированы или в стандартную библиотеку, или контейнеры типа std::vector
, или интеллектуальные указатели. Смарт-указатели стандартной библиотеки могут быть настроены так, чтобы они сами занимались освобождением занимаемой ими памяти. Эта возможность и заложена в основу ответа на вопрос, поставленного в заголовке статьи.
Объект является пересекающим границу динамической библиотеки, если он инициализируется в одном блоке, а используется в другом. Это происходит, когда, например, в dll инициализируется объект и возвращается указатель на него.
Предположим, одна библиотека (или исполнимый модуль) связывается с другой библиотекой, используя фабрику для динамической инициализации объекта и получения указателя на него. Блок, который использует этот указатель, может удалить указатель для освобождения области памяти, на которую он указывает. Если библиотека, которая выделяет память и блок, работающий с указателем, используют различные версии динамического выделения памяти ОС (CRT в Windows), то возникнет ошибка. Пример этой проблемы (в случае с Windows):

Пять подводных камней при использовании shared_ptr
Я расскажу о следующем:
- что такое перекрестные ссылки;
- чем опасны безымянные shared_ptr;
- какие опасности подстерегают при использовании shared_ptr в многопоточной среде;
- о чем важно помнить, создавая свою собственную освобождающую функцию для shared_ptr;
- какие существуют особенности использования шаблона enable_shared_from_this.
Автоматический контроль времени жизни общих C++-QML объектов
Умный указатель для Pimpl

Pimpl (pointer to implementation, указатель на имплементацию) — полезная идиома, распространенная в языке C++. У этой идиомы есть несколько положительных сторон, однако, в этой статье она рассматривается только как средство уменьшения зависимостей времени компиляции. Более подробно о самой идиоме можно посмотреть, например, здесь, здесь и здесь. Эта статья посвящена тому какой умный указатель использовать при работе с Pimpl и зачем он нужен.
Техника избежания неопределённого поведения при обращении к синглтону
Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби»
Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби» — разбор полётов
Концепция умного указателя static_ptr<T> в C++

В C++ есть несколько "умных указателей" - std::unique_ptr
, std::shared_ptr
, std::weak_ptr
. Также есть более нестандартные умные указатели, например в boost: intrusive_ptr
, local_shared_ptr
.
В этой статье мы рассмотрим новый вид умного указателя, который можно назвать static_ptr
. Больше всего он похож на std::unique_ptr
без динамической аллокации памяти.