是否可以在静态容器中存储包含unique_ptr的对象?

时间:2017-11-21 12:23:37

标签: c++ unique-ptr

我想在静态容器中存储包含unique_ptr的对象:

Class A
{
public:
    A() {}
    ~A() {}
private:
    unique_ptr<int> p;
};

static vector<A> vec = { A() };

但代码无法编译,因为A类由于唯一的ptr而无法复制。 如何解决这个问题,而不必在A类中定义一个可以对指针执行移动操作的复制构造函数?

3 个答案:

答案 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::vectorit doesn't allow move semantics的构造函数。

有一些解决方法,但它有点丑陋

std::initializer_list

Live

答案 2 :(得分:0)

如果您想阻止A类型的对象可复制,那么我看到的唯一方法是使用shared_ptr<A>的向量。不确定这是否符合您的要求或您的意图,但至少它是否有效:

static vector<shared_ptr<A>> vec = { make_shared<A>() };