gpt4 book ai didi

包含唯一指针成员变量的类的 C++ 赋值运算符

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:59 24 4
gpt4 key购买 nike

我知道如果我有一个带有智能唯一指针的类,则无法将该类分配给另一个实例,因为无法复制唯一指针。我知道我可以使唯一指针成为共享指针,这将解决问题。但是,如果我不想共享指针的所有权怎么办?是否可以创建一个赋值运算符来移动唯一指针并复制其他变量?

我了解到您可以使用 std::move 来传递所有权。

#include <iostream>
#include <memory>

struct GraphStructure { };

class test {

int a;
std::vector<int> vector;
std::unique_ptr<GraphStructure> Graph_;
};

int main () {

test t1;
auto t2 = t1;
}

最佳答案

test 类的默认 copy 构造函数被删除,因为成员 (graph_) 不可复制(如果您仍然可以复制任何有意义的方式,例如通过创建图形成员的拷贝,您必须在自己的复制构造函数上实现)。相反,默认的 move 构造函数仍然存在(std::unique_ptr 是可移动的)。所以您可以做的是:

test t1;
auto t2 = std::move(t1);

但是请注意,t1 将不再保留任何对象(您移动了对象,所以您移动了它的内容到另一个)并且之前由 t2 持有的对象被销毁。这是否是有意义的状态由您决定...

旁注:我写的关于复制和移动构造函数的内容也适用于复制和移动赋值......

关于包含唯一指针成员变量的类的 C++ 赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55743888/

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