访问指向对象指针向量的指针的第一个元素?
Posted
技术标签:
【中文标题】访问指向对象指针向量的指针的第一个元素?【英文标题】:Access first element of pointer to vector of object pointers? 【发布时间】:2019-09-05 22:21:55 【问题描述】:我将一个 shared_ptr 声明为一个 shared_ptr 的向量到这样的对象......
std::shared_ptr<std::vector<std::shared_ptr<my_obj_t>>> vec =
std::make_shared<std::vector<std::shared_ptr<my_obj_t>>>();
我的问题是我需要访问向量内部使用的数组中的第一个元素。在将其更改为对象的 shared_ptr 之前,它只是一个对象,我使用了 data()。
但是现在有了 shared_ptr 的向量,我不确定如何访问第一个元素,以便我可以向它添加偏移量并返回 my_obj_t 的指针。
我正在尝试使用类似的东西
(my_vec->data() + offset)
... 其中 func 需要一个指向 my_obj_t 数组的指针。
想法?
更新: 在我将它用作...
std::shared_ptr<std::vector<my_obj_t>> vec =
std::make_shared<std::vector<my_obj_t>>();
我会通过
访问它(vec->data() + offset)
【问题讨论】:
(*my_vec)[offset]->get()
似乎是最明显和最干净的。
您不能互换 "指向my_obj_t
数组的指针" 和 "指向std::shared_ptr<my_obj_t>
数组的指针"。它们根本不同。
如果我没看错的话就不行了。 vector
现在包含一个 std::shared_ptr<my_obj_t>
s 数组。要获得my_obj_t
的数组,您必须进行大量复制。我同意@uneven_mark。我想你可能会穿越into X-Y territory。
@ChrisDodd - 如果你想回答,我用了你的。虽然是 (*my_vec)[offset].get() ... 而不是 ->get()。
请提供minimal reproducible example。
【参考方案1】:
获取对从offset
指向的my_obj_t
的引用
*my_vec->at(offset)
没有数组my_obj_t
任何地方
【讨论】:
【参考方案2】:std::make_shared<std::vector<std::shared_ptr<my_obj_t>>>()
这会构造一个shared_ptr
s 的空向量。
我的问题是我需要访问使用的数组中的第一个元素 内部由向量。
由于向量是空的,你想象的内部数组可能还不存在。所以没有办法访问它的第一个元素。您必须先添加元素,然后再尝试使用它们。
【讨论】:
【参考方案3】:Chris 显然没有抽出时间来回答,因为它最干净,所以我就用这个。
(*my_vec)[offset]->get()
【讨论】:
以上是关于访问指向对象指针向量的指针的第一个元素?的主要内容,如果未能解决你的问题,请参考以下文章