gpt4 book ai didi

c++ - 如何将相互依赖的对象 move 到一起并维护内部引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:16 26 4
gpt4 key购买 nike

我正在尝试为具有两个仅 move 成员的类编写 move 构造函数。困难在于其中一个成员持有对另一个成员的引用,因此一旦它们都被 move ,其中一个成员引用一个不再存在的对象:

class Server : noncopyable
{
};

class Client : noncopyable
{
public:
Client(Server& server) : server_(server) {}
Client(Client&& other) : server_(std::move(other.server_)) {}

std::reference_wraper<Server> server_;
};

class MyClass : noncopyable
{
public:
MyClass()
: server_(),
client_(server_) {}

// destroys other.server_ which client uses before and after move
MyClass(MyClass&& other)
: server_(std::move(other.server_)),
client_(std::move(other.client_))

private:
Server server_;
Client client_;
};

这种情况有什么好的处理方法吗?基本上,引用对象在其自身 move 时需要将其引用更新为 move 到的版本。

最佳答案

解决这个问题的最简单方法是亲吻 MyClass 的值成员再见。

如果你简单地使用 std::unique_ptr<Server>std::unique_ptr<Client>相反,剩下的就很自然了——因为 Server对象本身永远不会 move ,而只会 move 由 MyClass 持有的指向它的指针。 ,您无需更新 Client 中的任何内容.

关于c++ - 如何将相互依赖的对象 move 到一起并维护内部引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20492629/

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