小编Ane*_*eel的帖子

在使用仅移动类型派生的类中定义析构函数时,使用std :: vector的emplace_back或push_back创建时会产生编译时错误

从以下代码中删除注释会导致编译时错误。似乎在派生类中定义析构函数会导致在emplace_back中调用复制构造函数

#include <vector>

struct A
{
    A() = default;
    A( A& ) = delete;
    A& operator=( A& ) = delete;
    A( A&& ) = default;
    A& operator=( A&& ) = default;
    ~A(){};
};

struct B : public A
{
    using A::A;
    //~B() = default; //ERROR
};

int main()
{
    std::vector< B > list;
    for( int ii = 0; ii < 3; ii++ ) { list.emplace_back(); }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误是:

In file included from /usr/include/c++/5/vector:62:0,
                 from a.cpp:1:
/usr/include/c++/5/bits/stl_construct.h: In instantiation …
Run Code Online (Sandbox Code Playgroud)

c++ stdvector move-semantics c++11

6
推荐指数
1
解决办法
114
查看次数

标签 统计

c++ ×1

c++11 ×1

move-semantics ×1

stdvector ×1