Предположим, мне нужно сделать следующее (это всего лишь образный код для обсуждения стандарта C++, поэтому я не буду обсуждать, почему я разработал его таким образом, поэтому не беспокойте меня чем-то вроде: ваш дизайн неверен .)
T* ptr = new T;
shared_ptr<T> p(ptr);
shared_ptr<T> q(ptr, SomeDeleterThatDoesnotDeleteButDoSomeOtherStuff());
Предположим, что логика гарантирует, что p
или некоторые его копии живут дольше, чем все копии q
, так что проблем практически не будет. Мой вопрос в том, запрещено ли это стандартом С++, например. явно указано как UB по стандарту С++, чтобы разные счетчики shared_ptr использовали один и тот же адрес?
Спасибо.
return q;
? - person Peter Wood   schedule 18.06.2012shared_ptr
1. фиктивным объектом, который выполняет действие в своем деструкторе, или 2. имея другой пользовательский модуль удаления, который выполняет действие. Но эти методы могут быть менее эффективными, если набор(ы)q
объектов быстро меняется относительно набора соответствующих владельцевp
. - person Potatoswatter   schedule 19.06.2012p
. - person Kan Li   schedule 19.06.2012p
выходит за рамки, он удалитptr
, а возвращенныйq
укажет на недопустимый объект без возможности узнать. Это кажется очень плохой идеей. Чего вы пытаетесь достичь? - person Peter Wood   schedule 19.06.2012p
или некоторые его копии живут дольше, чем все копииq
. Я также сказал, что не приветствую критику самого дизайна. В предыдущих комментариях я уже сказал, что предоставление удалениюq
копииp
может обеспечить эту гарантию, что является деталью реализации, о которой я подумал, что неинтересно говорить, поэтому не стал задавать вопрос. Поэтому ситуация, на которой вы настаиваете в своем комментарии, никогда не произойдет. - person Kan Li   schedule 20.06.2012