此问题已在此处有答案:
Understanding Default Move Constructor Definition(3个答案)
昨天关门了。
仅在添加~MyClass()
函数时出现问题。我认为错误是未定义的行为,或者与const MyClass&
有关,也许这种引用不适用于emplace_back
。评论解释其余部分:
#include <vector>
#include <iostream>
#include <memory>
struct MyClass
{
const int x;
MyClass(int _x) : x(_x)
{
}
};
struct MyClass2
{
std::unique_ptr<MyClass> my;
MyClass2(const MyClass& my2)
{
my.reset(new MyClass(my2.x));
}
// when adding this function
// error: static assertion failed: result type must be constructible from input type
~MyClass2()
{
printf("deleting\n");
}
};
int main()
{
MyClass main(12);
std::vector<MyClass2> ts;
for (int i = 0; i < 10; ++i)
{
ts.emplace_back(main);
}
printf("%i\n", ts[0].my->x);
return 0;
}
2条答案
按热度按时间t8e9dugd1#
您需要取消引用
std::unique_ptr
以访问数据。wribegjk2#
调用emplace_back函数会尝试创建一个新的MyClass2对象并将该对象复制到vector中。但是,无法复制unique_ptr对象。因此,您需要像下面这样为MyClass2编写一个复制构造函数