现在我有对象指针的两个向量移动在矢量对象指向一个不同的载体
std::vector<Object*> vec1;
std::vector<Object*> vec2;
比方说,VEC 1有两个对象和VEC 2现在没有。我如何将vec1中的一个对象移动到vec2而不破坏实际的对象?所以,最后两个矢量的大小都是1,每个矢量都有一个对象指针。
现在我有对象指针的两个向量移动在矢量对象指向一个不同的载体
std::vector<Object*> vec1;
std::vector<Object*> vec2;
比方说,VEC 1有两个对象和VEC 2现在没有。我如何将vec1中的一个对象移动到vec2而不破坏实际的对象?所以,最后两个矢量的大小都是1,每个矢量都有一个对象指针。
你不摧毁对象。把它从vec1和push_back中移出到vec2。即使你把它从两者中取出,你也不会破坏这个物体。
假设你要到最后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());',为了表明我们正在谈论相同的元素。 –
在调用delete之前,您不会销毁指向的数据(假设甚至有)。你可以做简单的东西...
vec2.push_back(vec1[1]);
vec1.pop_back();
'delete'也不会“销毁指针”。除此之外,如果不知道指针来自哪里,那么就不可能知道删除操作会发生什么。 –
非常真实,更新后。 – MGZero
前面已经指出的那样,我认为你可以从一般的指针更多的理解尝试与他们做任何事情之前受益。你不是在移动或者对对象本身做任何事情,而是在移动/创建指向该对象的新指针。
如果向量包含对象而不是指向对象的指针,而您想移动而不是复制,我相信您可以使用std :: move,它返回可移动但不可复制的右值引用。
有那么问题有关移动位置:What is std::move(), and when should it be used?
难道整个指针/对象/参考的东西还是有点不清楚吗?也许你会从阅读_ [好书]中受益(http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)_? – sbi