【问题标题】:Moving a Object pointer in a vector to a different vector将向量中的对象指针移动到不同的向量
【发布时间】:2011-09-29 18:42:17
【问题描述】:

现在我有两个对象指针向量

std::vector<Object*> vec1;
std::vector<Object*> vec2;

假设 vec1 有两个对象,而 vec2 没有。如何在不破坏实际对象的情况下将 vec1 中的一个对象移动到 vec2?所以,最后两个向量的大小都是 1,并且每个向量都有一个对象指针。

【问题讨论】:

  • 可能是整个指针/对象/引用的东西对你来说还是有点不清楚吗?也许你会从阅读 good book 中受益?

标签: c++ object pointers vector std


【解决方案1】:

在调用 delete 之前,您不会破坏指向的数据(假设甚至有任何数据)。你可以做一些简单的事情......

vec2.push_back(vec1[1]);
vec1.pop_back();

【讨论】:

  • delete 也不会“破坏指针”。除此之外,如果不知道指针的来源,就不可能知道 delete 会做什么。
【解决方案2】:

您不会破坏对象。将其从 vec1 中取出并 push_back 到 vec2。即使您将其从两者中取出,也不会破坏该对象。

【讨论】:

    【解决方案3】:

    假设您要将最后一个Object*vec1 移动到vec2

    vec2.push_back(vec1[1]);
    vec1.pop_back();  // not destroying Object*
    

    假设您要将任意Object* 移动到其他vector,然后获取它的vector::iterator 并将其复制到目的地。然后你可以在上面使用vector::erase()

    【讨论】:

    • 为什么不vec2.push_back(vec1.back());,以明确我们谈论的是同一个元素。
    【解决方案4】:

    正如已经指出的那样,我认为在尝试对指针进行任何操作之前,您可能会从对指针的一般理解中受益。您不是在移动对象本身或对对象本身做任何事情,而是在四处移动/创建指向该对象的新指针。

    【讨论】:

      【解决方案5】:

      如果向量包含对象而不是指向对象的指针,并且您想移动而不是复制,我相信您可以使用 std::move 来返回可移动但不可复制的右值引用。

      关于搬到这里有一个问题:What is std::move(), and when should it be used?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-27
        • 2011-10-01
        • 1970-01-01
        • 2011-12-19
        • 2011-02-11
        • 1970-01-01
        • 2021-06-19
        相关资源
        最近更新 更多