gpt4 book ai didi

c++ - 可以使用 std::vector 元素的地址作为指针吗?

转载 作者:行者123 更新时间:2023-11-30 00:51:23 24 4
gpt4 key购买 nike

考虑有一些 std::vector<ClassA> 的情况然后有另一个类的对象包含指向该 vector 元素的指针,例如:

ClassB Object(&ClassA[12]);

这是一个雷区,万一 vector 被调整大小等等?我应该有一个std::vector<ClassA *>吗?相反?

最佳答案

如果vector调整大小(例如,如果 push_back() 超出 vector 的当前容量,因此需要分配更大的堆内存块),然后 vector 元素的地址会发生变化(因此,指向 vector 元素的外部指针无效)。

如果您将指针存储到ClassA在 vector 中,而不是 ClassA 的直接实例, 那么指针在 vector 调整大小后仍然有效。

但是,请注意在 std::vector 中存储拥有原始指针是一件非常糟糕的事情,也是泄漏的源头。
您应该存储拥有智能指针,例如std::unique_ptr (对于唯一的所有权语义)或 std::shared_ptr (用于共享所有权语义)。

例如,您可以有一个 vector<unique_ptr<ClassA>> (因此, vector 拥有 ClassA 的动态分配实例),并且您可以拥有原始 观察 指针(例如简单的 ClassA* ) 来自外部对象。

关于c++ - 可以使用 std::vector 元素的地址作为指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22153368/

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