关键std::vector::clear是它将数组的大小减小到0,同时保持容量不变.向量中包含的对象的析构函数在该点处被调用.clear().
我不明白的是如何在不释放对象所在的内存的情况下调用析构函数.是否有一种已知的方法可以用传统的C++实现这一点?有没有更低级别的黑暗魔法完成这个?
要调用的析构函数Object类的Class
Object.~Class();
Run Code Online (Sandbox Code Playgroud)
std::vector 手动执行此操作.
请注意,在手动调用析构函数之后,如果Object具有自动存储持续时间或通过new然后分配deleted,则仍将再次调用析构函数,可能导致未定义的行为(如双删除).显式调用析构函数在这里工作是因为默认情况下,std::vector使用placement new来在已分配的原始存储上构造对象,而不是常规的new.