Безопасно ли использовать присвоение для boost :: intrusive_ptr таким образом?
class B : public A {...};
boost::intrusive_ptr<A> a = new B;
В этом проекте я использую старую библиотеку boost (1.36), и в соответствии с документацией boost мне интересно, почему это компилируется, потому что это назначение должно быть эквивалентно функции-члену «swap», которая, похоже, нуждается в другом навязчивом ptr, но не в необработанном указателе. Вызывается ли конструктор intrusive_ptr и, следовательно, приращение счетчика? (Был взломан sh (поврежденный размер по сравнению с prev_size), и информация трассировки стека привела меня к этому указателю)
Во всех других местах моего программного обеспечения я использую:
class B : public A {...};
boost::intrusive_ptr<A> a;
a = boost::intrusive_ptr<A>(new B);
Я думал, что несколько лет go я читал, что вы должны использовать вторую версию, но я больше не могу найти этот текст. Или в это время был изменен boost :: intrusive_ptr, так что первый пример действителен?