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

标签 c++ vector

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/

相关文章:

c++ - 在从 Boost 派生的类派生的类中自动禁止复制是不可复制的吗?

java - 在C++和Java内存模型的上下文中,单线程程序是否存在唯一的合法/有效执行?

c++ - 为什么我可以通过返回类型推导从函数外部访问函数内部定义的结构?

r - 当你有一个向量时,如何在 R 中使用子字符串函数?

c++ - TLS 握手成功后,服务器关闭并出现错误 SSL 例程 :SSL3_GET_RECORD:wrong version number

C++ 指针 : changing the contents without changing the address?

c++ - 返回字符串 vector

c++ - 函数内的 STL 容器何时将其数据保存在 C++ 中?

c++ - 将数据从txt文件读入 vector

c++ - 调试断言失败! vector 下标超出范围 C++