CA2202不多次处理对象——托管C++中的多次 我们得到了很多实例:CA2202在托管C++中不多次处理对象,代码分析在./P>

CA2202不多次处理对象——托管C++中的多次 我们得到了很多实例:CA2202在托管C++中不多次处理对象,代码分析在./P>,c++,code-analysis,managed-c++,C++,Code Analysis,Managed C++,对我来说,这似乎是代码分析中的一个错误,但我可能遗漏了一些东西 CA2202不多次处置对象对象“gcnew ConfigurationDataAssembler”可以在方法“DataAssembler::CreateConfigurationGuid,int^,int^,ObjectReference^,ObjectReference^,ObjectReference^,List^%,PLResult^%”中多次处置。为了避免生成System.ObjectDisposedException,您不

对我来说,这似乎是代码分析中的一个错误,但我可能遗漏了一些东西

CA2202不多次处置对象对象“gcnew ConfigurationDataAssembler”可以在方法“DataAssembler::CreateConfigurationGuid,int^,int^,ObjectReference^,ObjectReference^,ObjectReference^,List^%,PLResult^%”中多次处置。为了避免生成System.ObjectDisposedException,您不应该对一个对象调用Dispose多次。:Lines:935938 PL dataassembler.cpp 935

它提到的两行是returnnullptr和returnconfigdto

我已经用注释//here、//和here标记了这些行

下面是函数

  //---------------------------------------------------------------------------------------------------------
  // For IDataAssembler
  Ivara::PL::Data::UIData::Control::MCLBConfig^ DataAssembler::CreateConfiguration( System::Guid activityKey, int subscriptionID, int controlID, ObjectReference^ pRootObjRef, ObjectReference^ pSelectedObjRef, ObjectReference^ pOwningObjRef, [Out] List<Ivara::PL::Data::UIData::Control::ConfigurationListItem^>^% configList, [Out] PLResult^% result )
  {
     try
     {
        AutoStopWatch stopwatch( __FUNCTION__, LogCategories::RemotingTimings );
        ThreadToActivity cTTA( activityKey );

        result = PLResult::Success;

        //param check
        if ( subscriptionID <= 0 )
        {
           throw gcnew Ivara::PL::Exceptions::IvaraArgumentException( _T( "Invalid configurationID" ), _T( "configurationID" ) );
        }

        //fetch config
        UserConfigurationOR orUserConfig( subscriptionID );


        if ( !orUserConfig.isSet() )
        {
           result = gcnew PLResult( PLResult::eStatus::RelatedObjectNotFound, String::Format( _T( "The user configuration {0} could not be found" ), subscriptionID ) );
           return nullptr;
        }

        UserConfiguration* pUserConfig = orUserConfig.qryObjPtr();
        if ( pUserConfig == NULL )
        {
           result = gcnew PLResult( PLResult::eStatus::RelatedObjectNotFound, String::Format( _T( "The user configuration {0} could not be fetched, even though isSet returns true" ), subscriptionID ) );
           return nullptr;
        }
        //create assembler 
        ConfigurationDataAssembler assembler;
        assembler.Initialize( controlID, pRootObjRef, pSelectedObjRef, pOwningObjRef, result );
        if ( result != PLResult::Success )
        {
           return nullptr; // here
        }
        Ivara::PL::Data::UIData::Control::MCLBConfig^ configDTO = assembler.AssembleConfigurationDTO( pUserConfig, configList /*out param*/, nullptr );
        return configDTO; // and here

     }
     catch ( OTBaseException& unmanagedException )
     {
        throw FatalExceptionPolicy::HandleUnmanagedException( &unmanagedException, __FUNCDNAME__, __FILE__, __LINE__ );
     }
     catch ( Exception^ managedException )
     {
        throw FatalExceptionPolicy::HandleManagedException( managedException, __FUNCDNAME__, __FILE__, __LINE__ );
     }
  }

这是你的真实代码吗?签名不匹配,我没有看到gcnew ConfigurationDataAssembler或任何Dispose。这是实际代码。我很确定这是在讨论行中构造的对象:ConfigurationDataAssembler;