diff --git a/interfaces/innerkits/src/bundle_active_module_record.cpp b/interfaces/innerkits/src/bundle_active_module_record.cpp index 1a039e66d212993396639455cde8606639b85aaa..53265608e5d40000df04c95ffae33c2c4cc9cf53 100644 --- a/interfaces/innerkits/src/bundle_active_module_record.cpp +++ b/interfaces/innerkits/src/bundle_active_module_record.cpp @@ -119,18 +119,14 @@ BundleActiveModuleRecord *BundleActiveModuleRecord::Unmarshalling(Parcel &parcel if (size > MAX_FORM_NUM) { return nullptr; } - BundleActiveFormRecord *tmp = new (std::nothrow) BundleActiveFormRecord; - if (tmp == nullptr) { - return result; - } + for (uint32_t i = 0; i < size; i++) { - tmp = tmp->Unmarshalling(parcel); + std::unique_ptr tmp(BundleActiveFormRecord::Unmarshalling(parcel)); if (!tmp) { continue; } result->formRecords_.emplace_back(*tmp); } - delete tmp; return result; }