我想在静态容器中存储包含unique_ptr的对象:
Class A
{
public:
A() {}
~A() {}
private:
unique_ptr<int> p;
};
static vector<A> vec = { A() };
但代码无法编译,因为A类由于唯一的ptr而无法复制。 如何解决这个问题,而不必在A类中定义一个可以对指针执行移动操作的复制构造函数?
答案 0 :(得分:2)
首先,通过定义析构函数,您将丢失自动生成的移动构造函数。所以你要么必须删除它,要么定义一个合适的移动构造函数。然后,您可以像
一样简单地初始化它static vector<A> vec(1);
答案 1 :(得分:2)
不幸的是,它不会像编写的那样编译。列表初始化(使用export class RemoveBtn extends React.Component {
handleRemove = () => {
const {record, resourceId } = this.props;
projectsService.removeCompanyFromProject(resourceId, record.id).then(() => window.location.reload());
};
render() {
return <FlatButton label="Retirer" secondary onClick={this.handleRemove} />;
}
}
)和{...}
时,调用的构造函数是std::vector
和it doesn't allow move semantics的构造函数。
有一些解决方法,但它有点丑陋
std::initializer_list
答案 2 :(得分:0)
如果您想阻止A
类型的对象可复制,那么我看到的唯一方法是使用shared_ptr<A>
的向量。不确定这是否符合您的要求或您的意图,但至少它是否有效:
static vector<shared_ptr<A>> vec = { make_shared<A>() };