Существует другая часто используемая форма единственного передаваемого владельца, и желательно к auto_ptr
, потому что она избегает проблем, вызванных auto_ptr
безумное повреждение семантики присвоения.
я не говорю ни о ком другом, чем swap
. Любой тип с подходящим swap
функция может быть задумана как умная ссылка к некоторому содержанию, которым это владеет до тех пор, пока владение передается другому экземпляру того же типа путем свопинга их. Каждый экземпляр сохраняет свои идентификационные данные, но связывается с новым содержанием. Это похоже безопасно rebindable ссылка.
(Это - умная ссылка, а не интеллектуальный указатель, потому что Вы не должны явно разыменовывать его для достигания содержания.)
Это означает, что auto_ptr становится менее необходимым - только необходимо заполнить разрывы, где типы не имеют пользы swap
функция. Но все контейнеры станд. делают.
Я всегда настраиваю свои COM-видимые сборки со статической AssemblyVersion именно по этой причине. Если вы хотите, чтобы двоичные файлы были помечены версией, используйте вместо этого AssemblyFileVersion.
Компоненты с тем же CLSID должны быть совместимы, особенно если вы меняли номер сборки только между сборками. Вот единственная подходящая вещь, которую я нашел, чтобы подтвердить это, быстро погуглил.
Чтобы ответить на ваши вопросы напрямую: