gpt4 book ai didi

c++ - unique_ptrs、shared_ptrs 或 ID 的存储列表?

转载 作者:行者123 更新时间:2023-11-28 05:47:05 24 4
gpt4 key购买 nike

假设我有这样的类:

class Foo
{
public:
Foo();
private:
int id;
//Other data...
std::list< ??? > connected_foo;
}

class Bar
{
public:
Bar();
private:
std::list<std::unique_ptr<Foo> > all_foo;
}

Foo 类中,我正在创建一个类图结构,这样一些 Foo 对象就会链接到其他 Foo 对象。

在 C++11 中,哪个最“正确”?具体来说,??? 应该是什么? unique_ptr 列表? shared_ptr 列表?还是 int 的列表,具有遍历 all_foo 并找到特定对象的功能?

或者我应该一起使用不同的数据结构(即 map)?我知道 Boost 库提供了图表,但这比我在这里寻找的要多一些(也就是想坚持使用 C++ 标准库)。

如果“正确”过于模糊(可能是),假设优先顺序是可读性、最不可能导致内存泄漏和简洁性,按此顺序。

一些注意事项:我对 C++ 相当陌生(来自 C),所以我试图不将 C++ 用作“C with OO”。在 C 语言中,我会使用一个指针数组并最有可能将其称为一天(特别是因为我知道在程序结束之前不会释放对象);无法创建 unique_ptr 的拷贝让我有点困惑。我在这里针对的具体应用是用逻辑门创建电路(使用 OO)。这是一个(研究生)学校项目。

最佳答案

如果不了解您的完整用例,可能无法给出答案。但是如果 Bar真正拥有所有 Foo s 并将比所有这些都长寿(正如您在问题中所述)我建议:

std::vector<Foo*> connected_foo;

原始指针没有错——我们没有使用它们来传达任何所有权语义,只是观察。

有一个容器 unique_ptr<Foo>错了 - Bar已经拥有独特的所有权。你可以制作它们 shared_ptr<Foo> (并将 Bar 更改为共享所有权)。那是正确的,但如果Bar真正拥有它们是不必要的。相反,存储 ID 意味着查找的成本更高,所以我不确定这有什么好处。

关于c++ - unique_ptrs、shared_ptrs 或 ID 的存储列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36019714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com