unique_ptr 比原始指针快吗? C++

Is unique_ptr faster than raw pointer? C++

我在这里试验基准测试并发现奇怪的结果。
显然创建和删除原始指针比创建 unique_ptr 慢(当然根据我的测量),这怎么可能?

struct deleter 
{
    template<typename T>
    void operator()(T* ptr) 
    {
        delete ptr;
    }
};

void BM_rawPtr(benchmark::State& state)
{
    deleter d;
    for (auto _ : state)
    {
        int* p = new int(0);
        d(p);
    }
    state.SetItemsProcessed(state.iterations());
}


void BM_uniquePtr(benchmark::State& state)
{
    deleter d;
    for (auto _ : state)
    {
        std::unique_ptr<int, deleter> ptr(new int(0), d);
    }
    state.SetItemsProcessed(state.iterations());
}

BENCHMARK(BM_rawPtr);
BENCHMARK(BM_uniquePtr);
BENCHMARK_MAIN();

这给了我奇怪的结果:

我不想说“unique_ptr 比原始指针快”这样的废话。
显然我在这里漏掉了一些要点,这对任何人来说都是警钟吗?

提前致谢。

Is unique_ptr faster than row pointer?

没有

how is this possible?

基准测试很困难。可以测量由内存布局中的偶然差异引起的差异。