使用:
std::unique_ptr<base> master_list;
std::vector<derived*> sub_list;
使master_list的子集由以下内容创建:
(1)使用.get()从master_list中提取 (2)使用dynamic_cast转换为派生类 (3)将转换后的原始指针添加到sub_list (4)在需要时使用sub_list
你看到这种方法的错误吗?是不是更好:
(1)使用.get()从master_list中提取 (2)将原始指针添加到sub_list (3)在需要时从sub_list中检索 (4)使用dynamic_cast
强制转换为派生类答案 0 :(得分:0)
只要每个dynamic_cast
逻辑正确处理dynamic_cast
返回nullptr
的情况,这两种方法对我来说都是正确的。
在第二种情况下,这意味着当您决定需要某些内容时,实际上可能不存在(如果dynamic_cast
返回nullptr
)。
假设针对这两种方法都解决了nullptr
个问题,那么最佳方法将取决于您对{34}平均值的预期使用sub_list[i]
。 i
。如果预计大多数每个成员sub_list
将被多次使用,那么最好采用它(第一种方式)。
理由:dynamic_cast
不是免费的。在第一种方法中,每个dynamic_cast
只需sub_list[i]
次,然后可以多次使用它。
在第二种方法中,每次使用必须dynamic_cast
次。如果您可以将指针放入sub_list
然后决定不使用它们,那么这将获胜。如果这种情况发生了很多,你可以避免dynamic_cast
移动但未使用的那些指针。
如果你总是将每个指针放入sub_list
一次,那么这两种方法在性能(和正确性)方面应该相同。