条件成员在有条件的范围内

时间:2012-03-27 05:28:45

标签: c++ class scope

在C ++中,我创建了一个带有受保护(数据类型)成员和私有(函数)成员的类:

class Qt3DViewer : public QMainWindow
{
 ...
 protected:
    vtkImageData * imgC1;
 ...
 private:
    void ComputeSlices();
}

在类成员“ComputeSlices”的实现中,我使用条件if来更新imgC1

void Qt3DViewer::ComputeObliqueSlices()
{
 ...
 if (someFlag==1)
     this->imgC1 = reader1->GetOutput();
 else
     this->imgC1 = reader2->GetOutput();

 ...
 // Code that requires this->imgC1 updated!
}

问题是,在{if}块更新超出范围且imgC1成员 NOT 真正更新后,imgC1的更新仅在条件内有效!< / p>

如何使用条件块更新imgC1并确保在块之后实际更新成员?

2 个答案:

答案 0 :(得分:1)

除非

,否则您显示的代码无效
reader1->GetOutput(); 

返回指向本地对象的指针,这将导致未定义行为&amp;可能会显示您遇到的行为。

类似的东西:

vtkImageData *GetOutput()
{
    vtkImageData obj;
    //....
    //....
    //....
    vtkImageData* ptr = &obj;
    //....
    //....
    //....
    return ptr;
}

请注意,所有类成员无论其访问权限都可以在该类的成员函数中访问 因此,除非您的代码中隐藏着未定义的行为,否则this->imgC1始终可以访问,并且应该在成员函数中以您使用它的方式进行更新。

答案 1 :(得分:0)

读者可能有问题 - > GetOutput(),例如,GetOutput()的一些本地对象在所有GetOutput()之后被释放