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

Is it possible to store an object which contains a unique_ptr in a static container?

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

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

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

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

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

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

首先,通过定义析构函数,你将失去自动生成的移动构造函数。所以你要么必须删除它,要么定义一个合适的移动构造函数。然后,你可以像

一样简单地初始化它
static vector<A> vec(1);

不幸的是,它不会像写的那样编译。当列表初始化(使用 {...})一个 std::vector 时,调用的构造函数是带有 std::initializer_listit doesn't allow move semantics.

的构造函数

有解决方法,但有点难看

static auto vec = []{
    std::vector<A> vec;
    vec.emplace_back();
    return vec;
}();

Live