vtk内存管理猜测

不用智能指针的话

 

new出来的管线内容需要手动->Detele()掉 比如下面这几句代码的最后几个Delete()是可以生效的,猜测管线内部执行了深拷贝,

但是传进入被执行深拷贝的指针仍需要自己释放内存。

render中正在渲染的actor->Delete无效 可能采取方式不一样,还需要自己探索。

小白个人见解,错了的话好心人评论或私信提醒下

vtkPoints* points_cen = vtkPoints::New();
    vtkLineSource* lineSource_cen = vtkLineSource::New();
    vtkPolyDataMapper *mapper_cen = vtkPolyDataMapper::New();

    QList cenline_points;
    double m_spacing[3];

    if (index == 0)
    {
        cenline_points = DataCenter::GetDataSource()->GetSingleData1()->GetVessel2DData()->CenterLine;
        double *mm_spacing = DataCenter::GetDataSource()->GetVTKDataVector().at(DataCenter::GetDataSource()->GetSingleData1()->m_imageid)->GetSpacing();
        m_spacing[0] = *mm_spacing;
        m_spacing[1] = *(mm_spacing + 1);
        m_spacing[2] = *(mm_spacing + 2);
    }
    else if(index == 1)
    {
        cenline_points = DataCenter::GetDataSource()->GetSingleData2()->GetVessel2DData()->CenterLine;
        double *mm_spacing = DataCenter::GetDataSource()->GetVTKDataVector().at(DataCenter::GetDataSource()->GetSingleData2()->m_imageid)->GetSpacing();
        m_spacing[0] = *mm_spacing;
        m_spacing[1] = *(mm_spacing + 1);
        m_spacing[2] = *(mm_spacing + 2);
    }

    double temp_point_left[3];
    //左轮廓
    for (int i = 0; i < cenline_points.size(); i++)
    {
        temp_point_left[0] = cenline_points.at(i).centerpoint.x *(m_spacing[0]);
        temp_point_left[1] = cenline_points.at(i).centerpoint.y *(m_spacing[1]);
        temp_point_left[2] = current_slice *(m_spacing[2]);
        points_cen->InsertNextPoint(temp_point_left);
    }
    lineSource_cen->SetPoints(points_cen);
    mapper_cen->SetInputConnection(lineSource_cen->GetOutputPort());

    actor->SetMapper(mapper_cen);
    actor->GetProperty()->SetColor(0.0, 1.0, 0.0);

    ren_window->Render();

    if (points_cen!=NULL)
    {
        points_cen->Delete();
        points_cen = NULL;
    }

    if (lineSource_cen != NULL)
    {
        lineSource_cen->Delete();
        lineSource_cen = NULL;
    }

    if (mapper_cen != NULL)
    {
        mapper_cen->Delete();
        mapper_cen = NULL;
    }
    points_cen->GetClassName();

    return ;

你可能感兴趣的:(vtk,c++)