在某些场景下会出现返回智能指针对象的创造者(内部有一个智能指针map成员)先于被创造者析构的情况,当被创造的智能指针析构的时候会core。
针对这种情况,通过智能指针的reset(T*,delete函数)的delete函数通过boost::bind绑定创造者的删除函数来处理,里面对weak_ptr类型的创造者进行lock,通过share_ptr是否为null,若空则说明创造者已经析构了,所以直接delete当前被创造者对象,否则将创造者对象中的被创造者从map中删除后再delete。这里还用share_form_this(),防止普通类型指针直接空的情况,并转化为weak_ptr防止对创造者生命周期的延长。
当被创造者先析构的时候或不存在的情况,需要该对象时会在get函数里通过以上方式创建被创造者对象share指针。
被创造者不收创造者生命周期约束,创造者始终维护当前存活的被创造者,由被创造者reset创建时的delete函数来维护map中始终是存活的被创造者对象。