Назначение boost :: intrusive_ptr без вызова конструктора? - PullRequest
0 голосов
/ 31 января 2020

Безопасно ли использовать присвоение для 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, так что первый пример действителен?

...