diff --git a/io/io/inc/ROOT/TBufferMerger.hxx b/io/io/inc/ROOT/TBufferMerger.hxx index 39966f58dc77d356e6b4143f473a05f1a359d638..a5360991c35bc3c629056d3c256260d1bbb8eec8 100644 --- a/io/io/inc/ROOT/TBufferMerger.hxx +++ b/io/io/inc/ROOT/TBufferMerger.hxx @@ -104,7 +104,7 @@ private: /** TBufferMerger has no copy operator */ TBufferMerger &operator=(const TBufferMerger &); - void Init(TFile*); + void Init(std::unique_ptr<TFile>); void Merge(); void Push(TBufferFile *buffer); diff --git a/io/io/src/TBufferMerger.cxx b/io/io/src/TBufferMerger.cxx index e671391e8b78a0e2a4b4b26ed1ee28745750fa35..db9f87fd8c037bd3a0ec359313b2ac7189e3c18e 100644 --- a/io/io/src/TBufferMerger.cxx +++ b/io/io/src/TBufferMerger.cxx @@ -16,6 +16,8 @@ #include "TROOT.h" #include "TVirtualMutex.h" +#include <utility> + namespace ROOT { namespace Experimental { @@ -24,20 +26,20 @@ TBufferMerger::TBufferMerger(const char *name, Option_t *option, Int_t compress) // We cannot chain constructors or use in-place initialization here because // instantiating a TBufferMerger should not alter gDirectory's state. TDirectory::TContext ctxt; - Init(TFile::Open(name, option, /* title */ name, compress)); + Init(std::unique_ptr<TFile>(TFile::Open(name, option, /* title */ name, compress))); } TBufferMerger::TBufferMerger(std::unique_ptr<TFile> output) { - Init(output.release()); + Init(std::move(output)); } -void TBufferMerger::Init(TFile *output) +void TBufferMerger::Init(std::unique_ptr<TFile> output) { if (!output || !output->IsWritable() || output->IsZombie()) Error("TBufferMerger", "cannot write to output file"); - fMerger.OutputFile(std::unique_ptr<TFile>(output)); + fMerger.OutputFile(std::move(output)); fMergingThread.reset(new std::thread([&]() { this->WriteOutputFile(); })); }