Commit 4974090fa7d666a26d136f63c4b9c1da1cf062d8

Authored by m-holger
1 parent f871b753

Refactor `QPDFEmbeddedFileDocumentHelper::Members` to use `std::unique_ptr`, imp…

…rove memory management, and simplify initialization logic.
include/qpdf/QPDFEmbeddedFileDocumentHelper.hh
@@ -67,19 +67,7 @@ class QPDFEmbeddedFileDocumentHelper: public QPDFDocumentHelper @@ -67,19 +67,7 @@ class QPDFEmbeddedFileDocumentHelper: public QPDFDocumentHelper
67 private: 67 private:
68 void initEmbeddedFiles(); 68 void initEmbeddedFiles();
69 69
70 - class Members  
71 - {  
72 - friend class QPDFEmbeddedFileDocumentHelper;  
73 -  
74 - public:  
75 - ~Members() = default;  
76 -  
77 - private:  
78 - Members() = default;  
79 - Members(Members const&) = delete;  
80 -  
81 - std::shared_ptr<QPDFNameTreeObjectHelper> embedded_files;  
82 - }; 70 + class Members;
83 71
84 std::shared_ptr<Members> m; 72 std::shared_ptr<Members> m;
85 }; 73 };
libqpdf/QPDFEmbeddedFileDocumentHelper.cc
@@ -30,16 +30,25 @@ @@ -30,16 +30,25 @@
30 // >> 30 // >>
31 // >> 31 // >>
32 32
  33 +class QPDFEmbeddedFileDocumentHelper::Members
  34 +{
  35 + public:
  36 + Members() = default;
  37 + Members(Members const&) = delete;
  38 + ~Members() = default;
  39 +
  40 + std::unique_ptr<QPDFNameTreeObjectHelper> embedded_files;
  41 +};
  42 +
33 QPDFEmbeddedFileDocumentHelper::QPDFEmbeddedFileDocumentHelper(QPDF& qpdf) : 43 QPDFEmbeddedFileDocumentHelper::QPDFEmbeddedFileDocumentHelper(QPDF& qpdf) :
34 QPDFDocumentHelper(qpdf), 44 QPDFDocumentHelper(qpdf),
35 - m(new Members()) 45 + m(std::make_shared<Members>())
36 { 46 {
37 - auto root = qpdf.getRoot();  
38 - auto names = root.getKey("/Names"); 47 + auto names = qpdf.getRoot().getKey("/Names");
39 if (names.isDictionary()) { 48 if (names.isDictionary()) {
40 auto embedded_files = names.getKey("/EmbeddedFiles"); 49 auto embedded_files = names.getKey("/EmbeddedFiles");
41 if (embedded_files.isDictionary()) { 50 if (embedded_files.isDictionary()) {
42 - m->embedded_files = std::make_shared<QPDFNameTreeObjectHelper>(embedded_files, qpdf); 51 + m->embedded_files = std::make_unique<QPDFNameTreeObjectHelper>(embedded_files, qpdf);
43 } 52 }
44 } 53 }
45 } 54 }
@@ -65,7 +74,7 @@ QPDFEmbeddedFileDocumentHelper::initEmbeddedFiles() @@ -65,7 +74,7 @@ QPDFEmbeddedFileDocumentHelper::initEmbeddedFiles()
65 if (!embedded_files.isDictionary()) { 74 if (!embedded_files.isDictionary()) {
66 auto nth = QPDFNameTreeObjectHelper::newEmpty(qpdf); 75 auto nth = QPDFNameTreeObjectHelper::newEmpty(qpdf);
67 names.replaceKey("/EmbeddedFiles", nth.getObjectHandle()); 76 names.replaceKey("/EmbeddedFiles", nth.getObjectHandle());
68 - m->embedded_files = std::make_shared<QPDFNameTreeObjectHelper>(nth); 77 + m->embedded_files = std::make_unique<QPDFNameTreeObjectHelper>(nth);
69 } 78 }
70 } 79 }
71 80