vector :: clear如何在不丢失已分配内存的情况下调用析构函数

Rya*_*ing 2 c++ vector

关键std::vector::clear是它将数组的大小减小到0,同时保持容量不变.向量中包含的对象的析构函数在该点处被调用.clear().

我不明白的是如何在不释放对象所在的内存的情况下调用析构函数.是否有一种已知的方法可以用传统的C++实现这一点?有没有更低级别的黑暗魔法完成这个?

Siy*_*Ren 5

要调用的析构函数Object类的Class

Object.~Class();
Run Code Online (Sandbox Code Playgroud)

std::vector 手动执行此操作.

请注意,在手动调用析构函数之后,如果Object具有自动存储持续时间或通过new然后分配deleted,则仍将再次调用析构函数,可能导致未定义的行为(如双删除).显式调用析构函数在这里工作是因为默认情况下,std::vector使用placement new来在已分配的原始存储上构造对象,而不是常规的new.