Mic*_* IV 5 c++ 3d-engine stdvector
我正在使用C++ std向量存储渲染对象以进行简单的场景图实现.我需要能够在场景图中添加和删除运行时渲染对象.添加不是问题,用于删除:读取矢量和其他的文档C++容器看起来当弹出对象时会调用它们的析构函数.这不是我需要的,因为我希望以后能够将这些对象重新添加到渲染循环中.这个问题的可能解决方案是什么?我忘了提到的重要细节 - 我正在使用指向渲染对象的指针向量.
Nik*_* C. 10
您似乎对对象实例的基本概念感到困惑.向向量添加内容时,不要将其移入到向量中,复制它:
vector<string> vec;
string s;
vec.push_back(s);
Run Code Online (Sandbox Code Playgroud)
vec[0]是不是 s,它的一个副本s.所以,当你从载体中删除,s是不会受到影响.
如果您不想要副本,则应切换到指针.你可以从向量中删除指针,并且不会调用它们指向的对象的析构函数.
编辑:好的,似乎你已经在使用指针了.你说:
读取向量和其他C++容器的文档时,看起来当弹出对象时,会调用它们的析构函数
那是真实的.从向量中删除指针时,指针将被销毁.这就是文档的意思.它并不意味着指针指向的对象被破坏:
vector<string*> vec;
string s;
vec.push_back(&s);
vec.pop_back();
Run Code Online (Sandbox Code Playgroud)
s根本不受影响.弹出操作被破坏的是指针,它s不包含s自身的地址.
所以你没事.