std::vector::clear
的要点在于它将数组的大小削减为 0 而 leaving the capacity unchanged . vector 中包含的对象的析构函数在 .clear()
点被调用。
我不明白的是如何在不释放对象驻留的内存的情况下调用析构函数。是否有已知的方法可以用传统的 C++ 完成此操作?是否有某种级别低得多的黑魔法可以做到这一点?
最佳答案
调用 Class
类的 Object
的析构函数
Object.~Class();
std::vector
手动执行此操作。
注意手动调用析构函数后,如果Object
有自动存储时长或者通过new
分配,然后delete<,析构函数还是会被再次调用
d,可能导致未定义的行为(如双重删除)。显式调用析构函数在这里有效,因为默认情况下,std::vector
使用 placement new 在分配的原始存储上构造对象,而不是常规的 new。
关于c++ - vector::clear 如何在不丢失已分配内存的情况下调用析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20392960/