从以下代码中删除注释会导致编译时错误。似乎在派生类中定义析构函数会导致在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)