Change callable/model::clone to return a unique_ptr

This commit is contained in:
Martin Hořeňovský 2021-08-21 21:00:00 +02:00
parent 1cbbc5d2cb
commit 928ecbaccf
No known key found for this signature in database
GPG Key ID: DE48307B8B0D381A

View File

@ -36,7 +36,7 @@ namespace Catch {
private: private:
struct callable { struct callable {
virtual void call(Chronometer meter) const = 0; virtual void call(Chronometer meter) const = 0;
virtual callable* clone() const = 0; virtual Catch::Detail::unique_ptr<callable> clone() const = 0;
virtual ~callable(); // = default; virtual ~callable(); // = default;
callable() = default; callable() = default;
@ -48,7 +48,9 @@ namespace Catch {
model(Fun&& fun_) : fun(CATCH_MOVE(fun_)) {} model(Fun&& fun_) : fun(CATCH_MOVE(fun_)) {}
model(Fun const& fun_) : fun(fun_) {} model(Fun const& fun_) : fun(fun_) {}
model<Fun>* clone() const override { return new model<Fun>(*this); } Catch::Detail::unique_ptr<callable> clone() const override {
return Catch::Detail::make_unique<model<Fun>>( *this );
}
void call(Chronometer meter) const override { void call(Chronometer meter) const override {
call(meter, is_callable<Fun(Chronometer)>()); call(meter, is_callable<Fun(Chronometer)>());
@ -90,7 +92,7 @@ namespace Catch {
} }
BenchmarkFunction& operator=(BenchmarkFunction const& that) { BenchmarkFunction& operator=(BenchmarkFunction const& that) {
f.reset(that.f->clone()); f = that.f->clone();
return *this; return *this;
} }