我正在使用C++ std vector存储渲染对象以实现简单的场景图实现。我需要能够在运行时从场景图添加和删除渲染对象。添加不是问题,例如要删除:阅读vector和其他文档C++容器似乎弹出对象时会调用其析构函数,这不是我所需要的,因为我希望以后能够将那些对象重新添加到渲染循环中,对此问题可能的解决方案是什么?
重要的细节我忘了提及-我正在使用指向渲染对象的指针 vector 。
最佳答案
似乎您对对象实例的基本概念感到困惑。在 vector 中添加某些内容时,无需将其移动到其中,而是将其复制:
vector<string> vec;
string s;
vec.push_back(s);
vec[0]
不是s
,它是s
的拷贝。因此,当您将其从 vector 中删除时,s
不会受到影响。如果您不想复制,则应改用指针。您可以使它们从 vector 中删除指针,并且指向它们的对象的析构函数将不被调用。
编辑:
好的,看来您已经在使用指针了。你说:
那是真实的。当从 vector 中删除指针时,该指针将被销毁。这就是文档的意思。这并不意味着指针指向的对象将被破坏:
vector<string*> vec;
string s;
vec.push_back(&s);
vec.pop_back();
s
完全不受影响。弹出操作破坏的是保存s
的地址的指针,而不是s
本身的地址。很好。
关于c++ - 从C++容器中删除对象而不删除它们,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13549985/