gpt4 book ai didi

c++ - 如何使我的 shared_ptr 指向嵌套 vector 中的特定地址

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

我有一个 vector 的 vector ,像这样:

std::vector<std::vector<boost::shared_ptr<X> > > vOP;

我想将另一个 boost::shared_ptr 分配给上面的嵌套 vector,然后计算/显示某些可视化效果。

这是我的代码片段:

boost::shared_ptr<X> tempPtr;   

if(num < vOP[refID].size() ) // refID returns the ID number
{
tempPtr = vOP[refID].at(num);

ROS_INFO_STREAM("ADDRESS OF vOP: "<< vOP[refID].at(num)<<" for refID: "<<refID );
ROS_INFO_STREAM("&REFERENCE ADDRESS OF vOP: "<< &vOP[refID].at(num));
}

但是我收到断言失败错误,因为 tempPtr 没有指向那个嵌套的 vector

如果 refID 为 0,我的代码可以工作;但除此之外我的代码失败了。 ROS_INFO_STREAM 的输出地址不同。

谁能给我解释一下这两个地址是什么意思?如何让我的指针指向正确的地址?

最佳答案

假设您有:

typedef boost::shared_ptr<X> VectorContent;
typedef std::vector<VectorContent> 1D_Vector;
typedef std::vector<1D_Vector> 2D_Vector;

然后:

vOP[refID].at(num)返回 VectorContent&

&vOP[refID].at(num)返回 VectorContent*

打印时:

VectorContent&会调用boost::shared_ptr<X>::get()并打印 boost::shared_ptr<X> 的指针正在举行。

VectorContent*将打印 boost::shared_ptr<X> 的地址本身。

所以你得到两个不同的地址。

如果你想得到一个boost::shared_ptr<X>的地址那是在vector里面, 声明 tempPtr作为boost::shared_ptr<X>&相反,因此它是引用而非拷贝。

关于c++ - 如何使我的 shared_ptr 指向嵌套 vector 中的特定地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38646645/

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