Dre*_*rew 19 c++ constructor stdvector emplace
我有一个类型,我已经删除了复制构造函数,我想有一个vector这种类型,所以我需要通过创建所有元素emplace_back.但是,emplace_back似乎需要一个复制构造函数,因为编译器会发出一个关于无法实例化的警告,emplace_back因为复制构造函数已被删除.为什么需要复制构造函数?我认为重点emplace_back是建立vector没有复制任何东西.我甚至可以拥有一个vector没有复制构造函数的对象吗?
class MyType {
public:
MyType(std::array<double, 6> a) {}
MyType(const MyType& that) = delete;
};
int main() {
std::vector<MyType> v;
std::array<double, 6> a = {1,2,3,4,5,6};
v.emplace_back(a);
}
Run Code Online (Sandbox Code Playgroud)
编译器是clang/llvm.
bas*_*hrc 11
为了能够调用emplace_back,您的类型应该是EmplaceConstructible或MoveInsertible.如果删除了复制构造函数,则需要为类提供移动构造函数.(检查这是否有emplace_back的要求)
MyType(MyType &&a) {/*code*/} //move constructor
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3591 次 |
| 最近记录: |