瀏覽代碼

Merge pull request #2949 from xfxyjwf/3.3.x

Cleanup reflection objects for map entry.
Feng Xiao 8 年之前
父節點
當前提交
e91caa1f19
共有 2 個文件被更改,包括 10 次插入0 次删除
  1. 9 0
      src/google/protobuf/compiler/cpp/cpp_file.cc
  2. 1 0
      src/google/protobuf/struct.pb.cc

+ 9 - 0
src/google/protobuf/compiler/cpp/cpp_file.cc

@@ -751,6 +751,15 @@ void FileGenerator::GenerateBuildDescriptors(io::Printer* printer) {
     message_generators_[i]->GenerateShutdownCode(printer);
   }
 
+  if (HasDescriptorMethods(file_, options_)) {
+    for (int i = 0; i < message_generators_.size(); i++) {
+      if (!IsMapEntryMessage(message_generators_[i]->descriptor_)) continue;
+      printer->Print(
+          "delete file_level_metadata[$index$].reflection;\n",
+          "index", SimpleItoa(i));
+    }
+  }
+
   printer->Outdent();
   printer->Print(
     "}\n\n");

+ 1 - 0
src/google/protobuf/struct.pb.cc

@@ -133,6 +133,7 @@ void TableStruct::Shutdown() {
   delete file_level_metadata[2].reflection;
   _ListValue_default_instance_.Shutdown();
   delete file_level_metadata[3].reflection;
+  delete file_level_metadata[0].reflection;
 }
 
 void TableStruct::InitDefaultsImpl() {