shared_ptr
May. 2nd, 2014 10:28 pmПопытался использовать shared_ptr из C++11. Ну что я могу сказать, люди, создавшие напрочь бесполезный auto_ptr, сумели создать почти столь же бесполезный счетчик ссылок. Фундаментальная проблема в том, что они пытаются делать счетчик ссылок для совершенно любых структур, и потому хранят сам счетчик не прямо в структуре, а отдельно. При присвоении указателя в shared_ptr в первый раз оно создает отдельную структуру со счетчиком. И если потом присваивать эти shared_ptr друг к другу, то оно работает нормально. Но если взять и опять положить изначальный указатель в другой shared_ptr, то образуется два отдельных счетчика для одной структуры, и все погибает. И совершить такую ошибку очень легко. В-общем, этой штукой пользоваться нельзя. Мой темплейт Autoptr - гораздо, гораздо лучше.
P.S. Проблема разъяснилась. Надо просто никогда не конструировать такие объекты напрямую, а использовать make_shared. Ну, или статические методы, возвращающие прямо ссылку. И тогда указатели не вылазят наружу.
P.S. Проблема разъяснилась. Надо просто никогда не конструировать такие объекты напрямую, а использовать make_shared. Ну, или статические методы, возвращающие прямо ссылку. И тогда указатели не вылазят наружу.