Для создания отложенной конструкции, не требующей параметров:
boost::bind( boost::factory<T*>(), param1, param2 )
создаст функциональный объект, который выполняет эквивалент new T(param1, param2)
без необходимости параметров во время создания.
Чтобы создать shared_ptr, который поддерживает эту отложенную конструкцию:
Объедините свою фабрику со стандартом boost::shared_ptr
(например, в классе вашего творения), и вы получите результаты, которые вы описываете, включая соответствующую weak_ptr
функциональность ...
Какой бы код ни запускал отложенную конструкцию , которую должен выполнить клиент:
your_shared_ptr.reset( your_factory() );
Какой бы код ни вызывал разрушение объекта, должно выполняться:
your_shared_ptr.reset();
Общий указатель будет оцениваться до true
только в течение жизни объекта. И если вы хотите, чтобы вы отличали «еще не построенный» от «разрушенного», вы можете установить bool после запуска фабрики.