gpt4 book ai didi

c++ - 如何知道对象是否被移动

转载 作者:行者123 更新时间:2023-11-27 22:41:11 26 4
gpt4 key购买 nike

这可能是一个愚蠢的问题,但我觉得我缺少一些设计模式。

在一个类的销毁过程中,无论它是否被移动,我都想做不同的操作。我想过实现一个简单的 bool 值,在类移动时打勾。

像这样:

class A {
A(A && a) {
a.was_moved = true;
}

~A() {
do some stuff

if (!was_moved) {
clean some more stuff
}

bool was_moved = false;
};

有没有“更好”的方法来做到这一点?一些 cpp 功能我可以询问类是否被移动或一些已知的设计模式。

最佳答案

没有允许这样做的功能。但通常您不需要知道这一点。

通常,当您定义移动构造函数时,您希望它将基础数据从一个对象“移动”到另一个对象。在您的上下文中,您似乎希望源对象之后为“空”,以便只有一个所有者(毕竟它是“移动”,而不是“复制”)。因此,您真正需要的是“空”对象的正确定义以及处理这种情况的正确方法。

例如,假设您的类与文件描述符相关联。然后你可以让 fd 的默认值等于 -1 并在其上区分析构函数:

#include <utility>

class A
{
public:
A(int fd) : fd { fd }
{
}

A(A&& other) : fd { std::exchange(other.fd, -1) }
{
}

~A()
{
if (fd != -1)
{
close(fd);
}
}

private:
int fd = -1;
};

当然,您可以通过附加标志将对象标记为空。事实上,在某些特殊情况下,人们确实会这样做。即使在标准库中。您可能想要 read this .请注意 unique_lock 类上的 __owns_ 标志。

关于c++ - 如何知道对象是否被移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48907892/

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