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 67 private:
68 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 72 std::shared_ptr<Members> m;
85 73 };
... ...
libqpdf/QPDFEmbeddedFileDocumentHelper.cc
... ... @@ -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 43 QPDFEmbeddedFileDocumentHelper::QPDFEmbeddedFileDocumentHelper(QPDF& qpdf) :
34 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 48 if (names.isDictionary()) {
40 49 auto embedded_files = names.getKey("/EmbeddedFiles");
41 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 74 if (!embedded_files.isDictionary()) {
66 75 auto nth = QPDFNameTreeObjectHelper::newEmpty(qpdf);
67 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  
... ...