检查std :: move是否在容器上完成

特布基奇

有什么方法可以检查std :: move是否已在某些STL容器上完成?

我有两种类型的类(让我们说A和B),它们将另一个类的(某些)实例保存在内部容器中。如果A的实例在其容器中保留B的实例,那么B的该实例也必须在其容器中保留A的相同实例。

A可以看到B的私有方法(B就像它的朋友一样),但是我必须在B上实现move构造函数。由于B可以看到B的内部容器,所以我实现B对这两个类都进行了添加和删除。

问题是:
我必须为A实现move构造函数,并在该容器上使用stl :: move。在将容器移动到A的新实例之后,通知B旧类脱离的唯一方法是通过使用B和旧A的容器并对两个类都移除的方法。
B有什么办法知道旧的A的容器已移动并且不应该接受吗?
它无需检查即可工作,但是由于类在std :: move之后没有定义状态,因此我不应该在其上调用:: remove()(教授说这是错误的)。
请注意:这是我的作业问题,因此我不希望获得解决完整问题的非法帮助,仅希望检查对象一致性的部分在移动对象后跳过调用它的功能。

编辑:添加示例。
重要提示
1)我必须使用std :: move。我已经知道使用迭代器在while循环中完成所有操作的简便方法。但是,std :: move是明确需要的。
2)此代码段用于了解我的问题。作为一个学生,我想自己解决这个问题,我只需要有关在不允许的情况下如何跳过一行的信息。

class A;

class B {
public:
    // ...... some constructors, functions and destructor.
    void add(A *a) {
        // .. adds to both containers.
    };
    void remove(A *a) { // I need to remove from both containers at most of the times
        a_container.erase(a);
        a->b_container.erase(this); // PROBLEM(!!): after doing std::move(b_container) I shouldn't do this! How to check is b_container moved?
    };
private:
    std::_______<A*> a_container; //type of container is not important
};

class A {
    friend class B;
public:
    // ...... some constructors, functions and destructor.
    A(A && a) :
        b_container(std::move(a.b_container)) {
        //..
        for (B *b : b_container) {
            b->add(this); //adds to B's connected to the old instance
            a.remove(*b); //I need somehow to disconect old B's from pointer of moved A.
        }
    };
    void add(B & b) {
        b.add(this);
    };
    void remove(B & b) {
        b.remove(this);
    };
private:
    std::_______<B*> b_container; //type of container is not important
    //...
};
兆字节1024

有什么方法可以检查std :: move是否已在某些STL容器上完成?

的std ::移动模板不移动任何东西,它只是

获取对其参数的右值引用,并将其转换为xvalue。

如果b_container(std::move(a.b_container))编译了类似于的代码,std::move“ works”b_container具有的move构造函数,而move构造函数将移动指定为参数的对象的内部。否则,代码将无法编译。以下示例由于缺少move构造函数而无法编译。是在大肠杆菌上。

#include <utility>

class B {
public:
    B() = default;
    B(B &&) = delete;
};

int main() {
    B b0;
    B b1(std::move(b0));
    return 0;
}

以上文字总结。std::move始终“有效”。

未指定移动对象的状态。Link#00Link#01解释了此行为。

B有什么办法知道旧的A的容器已移动并且它不应该访问它吗?

无法检查旧容器是否已移动,即无法检查其状态。但是可以访问它,例如调用std::vector::empty方法,因为对象是有效的。请参阅此链接以获取解释。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何正确检查std :: function在C ++ 11中是否为空?

来自分类Dev

有没有办法检查std :: random_device是否实际上是随机的?

来自分类Dev

检查是否通过代码在IOS设备上完成了邮件设置

来自分类Dev

std :: unique_ptr :: reset检查托管指针是否为空?

来自分类Dev

检查std :: shared_ptr中是否为null

来自分类Dev

检查查询是否完成

来自分类Dev

如何检查std :: thread是否有效

来自分类Dev

检查std :: map中是否存在-计数与查找

来自分类Dev

如何检查std :: function是否绑定到特定对象的成员函数?

来自分类Dev

检查元素是否在std :: initializer_list中

来自分类Dev

使用boost检查std :: string是否为有效的uuid

来自分类Dev

如何检查dataTaskWithRequest是否完成?

来自分类Dev

如何检查std :: cout是否支持颜色?

来自分类Dev

要检查模板化参数是否为std :: endl

来自分类Dev

如何检查在ExecutorService上运行的所有任务是否已完成

来自分类Dev

检查std :: thread是否仍在运行

来自分类Dev

如何检查std中是否存在变量或函数?(在C ++中)

来自分类Dev

std :: move是否可以与左值引用一起使用?std :: move如何在标准容器上工作?

来自分类Dev

如何轻松检查std :: map和std :: unordered_map是否包含相同的元素

来自分类Dev

检查std :: list迭代器是否在末尾而无法访问容器

来自分类Dev

检查std :: filesystem :: path是否在目录内

来自分类Dev

检查某种类型是否是模板类std :: optional的实例

来自分类Dev

如何检查std :: unique_ptr是否为空(如果它位于std :: vector中)?

来自分类Dev

如何检查std :: max_element是否返回元素?

来自分类Dev

如何检查fadeOut()是否完成?

来自分类Dev

检查是否通过代码在IOS设备上完成了邮件设置

来自分类Dev

在std :: move之后重用std容器是否安全?

来自分类Dev

std::iterator 可以检查下一个元素是否存在于该迭代器上吗?

来自分类Dev

如何检查docker容器是否完成

Related 相关文章

  1. 1

    如何正确检查std :: function在C ++ 11中是否为空?

  2. 2

    有没有办法检查std :: random_device是否实际上是随机的?

  3. 3

    检查是否通过代码在IOS设备上完成了邮件设置

  4. 4

    std :: unique_ptr :: reset检查托管指针是否为空?

  5. 5

    检查std :: shared_ptr中是否为null

  6. 6

    检查查询是否完成

  7. 7

    如何检查std :: thread是否有效

  8. 8

    检查std :: map中是否存在-计数与查找

  9. 9

    如何检查std :: function是否绑定到特定对象的成员函数?

  10. 10

    检查元素是否在std :: initializer_list中

  11. 11

    使用boost检查std :: string是否为有效的uuid

  12. 12

    如何检查dataTaskWithRequest是否完成?

  13. 13

    如何检查std :: cout是否支持颜色?

  14. 14

    要检查模板化参数是否为std :: endl

  15. 15

    如何检查在ExecutorService上运行的所有任务是否已完成

  16. 16

    检查std :: thread是否仍在运行

  17. 17

    如何检查std中是否存在变量或函数?(在C ++中)

  18. 18

    std :: move是否可以与左值引用一起使用?std :: move如何在标准容器上工作?

  19. 19

    如何轻松检查std :: map和std :: unordered_map是否包含相同的元素

  20. 20

    检查std :: list迭代器是否在末尾而无法访问容器

  21. 21

    检查std :: filesystem :: path是否在目录内

  22. 22

    检查某种类型是否是模板类std :: optional的实例

  23. 23

    如何检查std :: unique_ptr是否为空(如果它位于std :: vector中)?

  24. 24

    如何检查std :: max_element是否返回元素?

  25. 25

    如何检查fadeOut()是否完成?

  26. 26

    检查是否通过代码在IOS设备上完成了邮件设置

  27. 27

    在std :: move之后重用std容器是否安全?

  28. 28

    std::iterator 可以检查下一个元素是否存在于该迭代器上吗?

  29. 29

    如何检查docker容器是否完成

热门标签

归档