gpt4 book ai didi

c++ - 使用 boost::pool_allocator 时不调用 move 构造函数

转载 作者:太空狗 更新时间:2023-10-29 20:39:32 27 4
gpt4 key购买 nike

我有以下简单的测试代码。

#include <stack>
#include <iostream>
#include "boost/pool/pool_alloc.hpp"

struct Frame
{
uint32_t i{};

Frame(uint32_t _i) : i(_i) {}

Frame(const Frame& f)
{
std::cout << "Copy constructor" << std::endl;
i = f.i;
}

Frame(Frame&& f)
{
std::cout << "Move constructor" << std::endl;
std::swap(i, f.i);
}
};

int main(int argc, char* argv[])
{
{
std::stack<Frame, std::deque<Frame>> stack;

Frame f(0);
stack.push(std::move(f)); // Move constructor
stack.push(Frame(1)); // Move constructor
}

{
std::stack<Frame, std::deque<Frame, boost::pool_allocator<Frame>>> stack;

Frame f(0);
stack.push(std::move(f)); // Copy constructor
stack.push(Frame(1)); // Copy constructor
}


return 0;
}

当我用 Clang 或 GCC 编译这段代码时,它会给我以下输出:

Move constructor
Move constructor
Copy constructor
Copy constructor

为什么使用 boost::pool_allocator 会阻止编译器使用 move 构造函数?
我错过了什么吗?

最佳答案

pool_allocator 并没有完美地将参数转发给 construct:它只是采用对值类型的 const 引用并将其作为放置 new 的初始值设定项。

那是因为 pool_allocator 还没有为 C++11 更新。

关于c++ - 使用 boost::pool_allocator 时不调用 move 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27638036/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com