Я не буду вдаваться в дискуссии о boost :: shared_ptr или каких-либо умных ptr. И вот несколько причин, почему с разных точек зрения между линиями, и почему умные указатели всегда и всегда могут быть сокращены или выбиты.
Код, похоже, эмулирует модель CLR и NT, и в этом случае ОС предопределяет семантику того, что вы делаете. Он называется :: DuplicateHandle, и он хорошо работает и больше подходит для межпроцессных сценариев (и может взломать меньше, чем boost :: interprocess или аналогичный). И это применимо к нескольким другим контекстам.
Теперь второй, надеюсь, не противоречивый момент, когда наследством бедного старого ОО пренебрегают, потому что фокус сдерживания регулярно выигрывает (хотя на самом деле он не имеет ничего общего с ОО, когда вы играете за дополнения для тех, кто постоянно кричит: содержать меня). Поэтому независимо от того, насколько редким это может быть, или является ли оно аргументом OO, не OO или O (o): «наследование» выигрывает здесь.
Почему? Поскольку это концепция ожидаемого дескриптора, включающая в себя событие Win32, Mutex, виды автоматического сброса, Thread, все это, кроме cris_section (которое также имеет задний дескриптор глубоко внутри, но специально обрабатывается как в CLR, так и в NT, плюс двойственный характер). Таким образом, это имеет абсолютный смысл для:
typedef CHandleT WaitHandle;
быть корнем «иерархии» вместе с семантикой копирования того, чем является базовая реализация.
Наконец, это обеспечивает наиболее эффективное представление ваших типов данных, которые являются дескрипторами, поскольку они будут имитировать операционную систему, на которую вы нацеливаетесь, и не нуждаются ни в подсчете ссылок, ни в лавинном / пульсации.
Затем пришла кроссплатформенная разработка и поддержка :: многопоточность и разрушила историю перед сном: -)