c++ - 在 unique_ptr vector 中转移所有权

标签 c++ vector copy-constructor unique-ptr ownership

我有 2 个类 A 和 B

//A.h
class A{};

// B.h
typedef unique_ptr<A, AllocateA> APtr;
typedef vector<APtr> BVEC;

class B
{
public:
   BVEC vec; //error is here
   //....
};

当我编译代码时,我得到 unique_ptr....attempting to reference a deleted function

然后我像这样向 B 类添加一个复制构造函数和一个赋值运算符

class B
{
public:
   BVEC vec; //error is here
   //....
   B& operator=(B&b);
   B(B&b);
};

但我仍然收到相同的错误消息。

最佳答案

那是因为 unique_ptr 是......唯一的,它们指向一个对象的整个点,当 unique_ptr 超出范围时 - 它删除它指向的变量。如果您可以轻松地将指向变量分配给另一个 unique_ptr,指向变量何时会被删除?当第一个超出范围或第二个时?这里没有“唯一性”。

这就是为什么复制或分配 unique_ptr 是不允许的,复制构造函数和赋值运算符被禁用的原因

您正在寻找 shared_ptr 。多个 shared_ptr 可以指向一个变量,当所有变量都超出范围时它会被删除,某种原始垃圾收集器

关于c++ - 在 unique_ptr vector 中转移所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28214652/

相关文章:

c++ - 如何在基类 vector 中返回派生对象的拷贝?

c++ - 为什么复制和 move 构造函数以相同数量的 memcopies 结束?

c++ - 如何在 C++ 中手动运行消息泵

c++ - 我可以创建具有指定长度但没有初始化的 C++ 字符串/vector 吗?

c++ - vector::insert 重载之间的 libc++ 区别

vector - 如何将集合中的多个元素传递给一个或多个元素可变的函数?

不同包中的java复制构造函数

c++ - 为什么 VS 2008 编译时没有带有错误模板逻辑的警告?

c++ - 自定义弱/强引用指针

python - 计算二维碰撞后的合成速度矢量