【发布时间】:2019-03-01 21:31:51
【问题描述】:
我正在从 C#/Java 迁移到 C++,并且无法正确地了解做事的方法。
我正在构建一种数据结构来支持算法和功能。所以假设一个外部对象拥有一个std::vector<Widget> vecW 和一个std::vector<Vidget> vecV。它创建了许多Widget 类型的对象,并将它们添加到vecW。它随后创建了许多Vidget 的实例,并将它们添加到vecV。 (以防万一:当外部对象被销毁时,应该释放为这些对象分配的内存。)
现在,有一些自定义逻辑规定,对于列表中的每个 Widget 类型的对象,它需要访问一些 Vidget 类型的对象。 (反之亦然,如果小部件w 可以访问小部件v,那么小部件v 需要访问小部件w。)
在 C# 中,我会在每个 Widget 中保留一个 List<vidget> ListOfVidgets,在每个 Vidget 中保留一个 List<Widget> ListOfWidgets,并根据自定义逻辑实例化这些列表。 Java 类似(我相信 C# 中的 List<Vidget> 类似于 Java 中的 arraylist<Vidget>,有点像 C++ 中的 std::vector<Vidget*>/std::vector<Vidget>)。
所以我可以在每个小部件中使用std::vector<Vidget*>,以便根据自定义逻辑进行实例化。这是最好的方法吗?或者是否有优先使用智能指针(甚至其他方法)的方法?
编辑:生命周期如下: 1) 外部对象 get 的创建和填充(带有小部件/vidgets)。 2)自定义逻辑确定关系。 3) 使用数据结构。 (因此在使用期间不会更改关系和/或添加/删除小部件。) 4)(仅)当外部对象被销毁时,需要释放内存。
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: c++ pointers smart-pointers