@@ -54,21 +54,15 @@ class WebAssemblyInterface_EXPORT InputStreamBase
5454 std::istream *
5555 GetPointer ()
5656 {
57- return m_IStream;
57+ return m_IStream. get () ;
5858 }
5959
6060 void
6161 SetJSON (const std::string & json)
6262 {
63- if (m_DeleteIStream && m_IStream != nullptr )
64- {
65- delete m_IStream;
66- }
67- m_DeleteIStream = false ;
68- m_WasmStringStream = WasmStringStream::New ();
69- m_WasmStringStream->SetJSON (json.c_str ());
70-
71- m_IStream = &(m_WasmStringStream->GetStringStream ());
63+ const auto wasmStringStream = WasmStringStream::New ();
64+ wasmStringStream->SetJSON (json.c_str ());
65+ m_IStream = std::make_unique<std::stringstream>(std::move (wasmStringStream->GetStringStream ()));
7266 }
7367
7468 virtual void
@@ -78,28 +72,20 @@ class WebAssemblyInterface_EXPORT InputStreamBase
7872 void
7973 SetFile (const std::string & fileName, const std::ios_base::openmode openMode)
8074 {
81- if (m_DeleteIStream && m_IStream != nullptr )
82- {
83- delete m_IStream;
84- }
85- m_IStream = new std::ifstream (fileName, openMode);
86- m_DeleteIStream = true ;
75+ m_IStream = std::make_unique<std::ifstream>(fileName, openMode);
8776 }
8877
8978 InputStreamBase () = default ;
90- virtual ~InputStreamBase ()
91- {
92- if (m_DeleteIStream && m_IStream != nullptr )
93- {
94- delete m_IStream;
95- }
96- }
9779
98- private:
99- std::istream * m_IStream{ nullptr };
100- bool m_DeleteIStream{ false };
80+ // Move semantics for its derived classes:
81+ InputStreamBase (InputStreamBase &&) = default ;
82+ InputStreamBase &
83+ operator =(InputStreamBase &&) = default ;
10184
102- WasmStringStream::Pointer m_WasmStringStream;
85+ virtual ~InputStreamBase () = default ;
86+
87+ private:
88+ std::unique_ptr<std::istream> m_IStream;
10389};
10490
10591
0 commit comments