|  | 
 | #include "benchmark/benchmark.h" | 
 |  | 
 | #include <cassert> | 
 | #include <memory> | 
 |  | 
 | class MyFixture : public ::benchmark::Fixture { | 
 |  public: | 
 |   void SetUp(const ::benchmark::State& state) { | 
 |     if (state.thread_index == 0) { | 
 |       assert(data.get() == nullptr); | 
 |       data.reset(new int(42)); | 
 |     } | 
 |   } | 
 |  | 
 |   void TearDown(const ::benchmark::State& state) { | 
 |     if (state.thread_index == 0) { | 
 |       assert(data.get() != nullptr); | 
 |       data.reset(); | 
 |     } | 
 |   } | 
 |  | 
 |   ~MyFixture() { assert(data == nullptr); } | 
 |  | 
 |   std::unique_ptr<int> data; | 
 | }; | 
 |  | 
 | BENCHMARK_F(MyFixture, Foo)(benchmark::State &st) { | 
 |   assert(data.get() != nullptr); | 
 |   assert(*data == 42); | 
 |   for (auto _ : st) { | 
 |   } | 
 | } | 
 |  | 
 | BENCHMARK_DEFINE_F(MyFixture, Bar)(benchmark::State& st) { | 
 |   if (st.thread_index == 0) { | 
 |     assert(data.get() != nullptr); | 
 |     assert(*data == 42); | 
 |   } | 
 |   for (auto _ : st) { | 
 |     assert(data.get() != nullptr); | 
 |     assert(*data == 42); | 
 |   } | 
 |   st.SetItemsProcessed(st.range(0)); | 
 | } | 
 | BENCHMARK_REGISTER_F(MyFixture, Bar)->Arg(42); | 
 | BENCHMARK_REGISTER_F(MyFixture, Bar)->Arg(42)->ThreadPerCpu(); | 
 |  | 
 | BENCHMARK_MAIN(); |