在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
并确保在块之后实际更新成员?
答案 0 :(得分:1)
除非
,否则您显示的代码无效reader1->GetOutput();
返回指向本地对象的指针,这将导致未定义行为&amp;可能会显示您遇到的行为。
类似的东西:
vtkImageData *GetOutput()
{
vtkImageData obj;
//....
//....
//....
vtkImageData* ptr = &obj;
//....
//....
//....
return ptr;
}
请注意,所有类成员无论其访问权限都可以在该类的成员函数中访问
因此,除非您的代码中隐藏着未定义的行为,否则this->imgC1
始终可以访问,并且应该在成员函数中以您使用它的方式进行更新。
答案 1 :(得分:0)
读者可能有问题 - > GetOutput(),例如,GetOutput()的一些本地对象在所有GetOutput()之后被释放