向量

时间:2016-03-29 16:50:20

标签: c++ unique-ptr

使用:

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

强制转换为派生类

1 个答案:

答案 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一次,那么这两种方法在性能(和正确性)方面应该相同。