在调用Delete函数后调用vtkObject上的成员函数是安全的吗?

时间:2016-08-03 03:18:30

标签: c++ vtk

以下代码来自vtkAbstractTransform。我的应用程序粉碎了这个函数,这段代码安全吗?

 void vtkTransformConcatenation::Concatenate(const double elements[16])
    {
    // concatenate the matrix with either the Pre- or PostMatrix
    if (this->PreMultiplyFlag)
    {
        if (this->PreMatrix == NULL)
        {
            // add the matrix to the concatenation
            vtkSimpleTransform *mtrans = vtkSimpleTransform::New();
            this->Concatenate(mtrans);
            mtrans->Delete(); // call Delete on mtrans
            this->PreMatrixTransform = mtrans;
            this->PreMatrix = mtrans->GetMatrix();
        }
        vtkMatrix4x4::Multiply4x4(*this->PreMatrix->Element, elements,
                              *this->PreMatrix->Element); // My application crushed here.
       ...
    } }

2 个答案:

答案 0 :(得分:0)

没有。调用Delete可能会删除该对象。访问已删除的对象会调用未定义的行为。

答案 1 :(得分:0)

从概念上讲,将函数调用于已删除的对象是没有意义的。删除对象后此作业

 this->PreMatrixTransform = mtrans;

通常在此> PreMatrixTransform中放置垃圾值(可能为NULL值)。当使用这个变量时(我很确定)它会导致崩溃。