Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用boost::pool_分配器时未调用移动构造函数_C++_C++11_Boost_Move Semantics_Boost Pool - Fatal编程技术网

C++ 使用boost::pool_分配器时未调用移动构造函数

C++ 使用boost::pool_分配器时未调用移动构造函数,c++,c++11,boost,move-semantics,boost-pool,C++,C++11,Boost,Move Semantics,Boost Pool,我有以下简单的测试代码 #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"

我有以下简单的测试代码

#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;
}
为什么使用boost::pool_分配器会阻止编译器使用move构造函数?

我遗漏了什么吗?

pool\u分配器
没有将参数完美地转发到
construct
:它只需要对值类型进行
const
引用,并将其作为初始值设定项传递给placement
new

这是因为C++11尚未更新池分配器

Move constructor
Move constructor
Copy constructor
Copy constructor