指针的指针的Push_back向量

push_back vector of pointers of pointers

本文关键字:指针 向量 back Push      更新时间:2023-10-16
std::vector<BPatch_point *> *points;
points = functions[0]->findPoint(BPatch_entry);
if ((*points).size() == 0)
{
  cout << "Failed to get the points" << endl;
}
std::vector<ldframework::Point *> *new_points;
for(unsigned int i = 0; i < points->size(); i++ )
{
  ldframework::Point *pt1 = new ldframework::PointImpl((*points[0]));
  new_points->push_back(pt1);
}

PointImpl构造函数是:

ldframework::PointImpl::PointImpl(const BPatch_point&* po)
{
    Bpatch_point *_bpoint=new BPatch_point(*po);     
}

在编译时,我得到以下错误。你能帮帮忙吗

>BfunctionImpl.cpp: In member function âvirtual const std::vector<ldframework::Point*, std::allocator<ldframework::Point*> >* ldframework::BfunctionImpl::find_Point(ldframework::locClass)â:

BfunctionImpl.cpp:86:错误:期望的类型说明符BfunctionImpl.cpp:86:错误:初始化时无法将 int* 转换为 ldframework::Point* BfunctionImpl.cpp:86: error: expected ;

86行编号代码为

ldframework::Point *pt1 = new ldframework::PointImpl((*points[0]));

看一下第86行(*points[0])部分

由于points是指向向量的指针,并且数组下标操作符[]的优先级高于一元间接操作符*,因此解析为*(*(points+0))

您可以尝试将其替换为(*points)[0]或甚至:(*points)[i]

此外,new_points是一个指向vector的指针,该指针在使用之前没有被赋值给指向有效对象的指针。

另外,我看到你使用了很多指针,这会导致额外的间接,局部性的降低,并给你清理东西的负担或导致内存泄漏。new_points必须是指向ldframework::Point的指针向量吗?您可以使用std::unique_ptr<ldframework::Point>的向量来避免清理负担,但是您也可以考虑:

std::vector<ldframework::PointImpl> *new_points =
  new std::vector<ldframework::PointImpl>;
for(unsigned int i = 0; i < points->size(); i++ )
{
  new_points->push_back( ldframework::PointImpl((*points)[i]) );
}

或者更好:

std::vector<ldframework::PointImpl> new_points;
for(unsigned int i = 0; i < points->size(); i++ )
{
  new_points.push_back( ldframework::PointImpl((*points)[i]) );
}