std::vector::clear的要点是,它在保持容量不变时将数组的大小削减到0。向量中包含的对象的析构函数在.clear()点被调用。
我不明白的是,如何在不释放对象驻留的内存的情况下调用析构函数。是否有一种已知的方法可以用传统的C++来完成这一任务?有什么更低层次的黑魔法能做到这一点吗?
发布于 2013-12-05 06:27:38
我不明白的是,如何在不释放对象驻留的内存的情况下调用析构函数。是否有一种已知的方法可以用传统的C++来完成这一任务?
显式调用析构函数。标准规定(在第23.2.1节),容器中的每一种类型都必须允许该表达式格式良好:
(&a)->~X()发布于 2013-12-05 12:39:06
std::vector<T>包含一个能够做到这一点的std::allocator<T>。特别是,请参见std::allocator::destroy(T* ptr)。
在幕后,std::allocator<T>将执行(非常类似于) ptr->~T()。
https://stackoverflow.com/questions/20392960
复制相似问题