gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:57:02 25 4
gpt4 key购买 nike

我有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com