对象不持久

时间:2013-11-19 22:32:14

标签: matlab object constructor destructor matlab-class

在下面的代码中,类TdcTestResult的析构函数在函数add的末尾被调用,因此方法变量mTdcTestResults将再次变为空。

如何让TdcTestResult mTdcTestResults内的实例持久化?

classdef Tdc

    properties % (Access = private)
        mTestRun     = TdcTestRun;
        mTestResults = [];
    end

    methods(Access = public)

        function add(obj, componentSerialNumber, testName, testVersion, paramName, unitOfMeasureCode, paramScale, paramLimitTypeCode, paramLowerLimit, paramUpperLimit, responseValue, folderPath, isFailed, isOverridden, overriddenReason)
            if(nargin > 0)
                obj.mTestResults = [obj.mTestResults TdcTestResult];
                obj.mTestResults(end).set(componentSerialNumber, testName, testVersion, paramName, unitOfMeasureCode, paramScale, paramLimitTypeCode, paramLowerLimit, paramUpperLimit, responseValue, folderPath, isFailed, isOverridden, overriddenReason);

                obj.mTestRun.addTestResult(obj.mTestResults(end));
            end
        end
    end
end

2 个答案:

答案 0 :(得分:0)

TdcTestResult需要handle成为超类,否则您的代码无法正常工作。 documentation

中的更多详细信息

如果这没有帮助,请提供代码的可执行示例。

答案 1 :(得分:0)

我认为实际问题是你实际上没有改变obj。 如果愿意,对TdcTestResult内的新mTestResults的引用应该可以防止析构函数被调用。

这与Danial R的答案有关: 如果您未将Tdc实现为handle子类,则add方法必须返回修改后的obj。 否则,您在add内所做的更改将丢失。

因此,您必须返回obj并将调用语法修改为

tdcObject = tdcObject.add(...);

或从handle继承 - 这可能是更好的选择。