std :: shared_ptr和双回调

| 我有一些逻辑,在其中我将std :: shared_ptrs用于继承层次结构中的对象。在某一时刻,我需要根据它们的真实类型来处理这些对象,因此我使用了双重调度(即,我在基类上调用了一个方法,然后又在另一个具有实类型的对象上调用了一个方法,请参见例如GoF中的访问者模式)。 现在,我可以将引用传递给具有正确类型的对象或副本。由于多种原因,副本毫无疑问。引用通常会很好,因为该调用发生在shared_ptr所在的作用域以下的范围内,因此在此调用发生时它不会被销毁。但是对于某些子类型,我需要将对象存储在STL容器中,因此我需要绝对确保它不会被破坏。显然,裸露的指针或新的shared_ptrs在这里无法正常工作,因此我需要获取对从其调用此文件的shared_ptr的引用。 现在,我正在执行以下操作: 我使用命名构造函数而不是真正的构造函数来创建对象。这将在对象内部设置一个weak_ptr,并提供一个shared_ptr以供对象使用。当发生双重回调时,我从weak_ptr中获得了一个新的shared_ptr并将其存储在Container中,因此该对象不会被破坏。但是,这使我的构造逻辑非常难看。 有什么更好的方法吗?     
已邀请:
std::enable_shared_from_this
派生您的课程-然后您可以随时从您的对象中提取shared_ptr! 它与您现在使用ѭ1所做的操作并没有太大不同,但这是一种干净而可以接受的惯用法。     
您可以使用dynamic_pointer_cast将shared_ptr以正确的类型传递给您的对象。     

要回复问题请先登录注册