在 C++ 中释放 std::vector 对象
本文将解释如何在 C++/C 中释放 std::vector
对象。 首先,我们将了解释放的自编码方式,然后,我们将研究如何在 C++ 中动态释放 std::vector
对象。
在 C++ 中释放对象
当创建 C++ 中的类对象时,会自动调用称为构造函数的特殊成员函数,该函数使用一些默认值初始化该对象。 类似地,当创建的对象超出范围时,会自动调用特殊的成员函数析构函数。
这个析构函数释放了所创建的对象占用的所有内存。 释放对象占用的内存的过程称为释放。
std::vector 对象
在 C++ 中,std 是命名空间,::
运算符是作用域运算符。 该作用域运算符告诉编译器在哪个类/命名空间中查找标识符/类。
如果表达式类似于std::cout
,则表示在std命名空间中查找cout标识符。 同样,std::vector
的意思是在 std 命名空间中查找向量类。
对于释放,首先,我们需要创建一个向量类的对象。 为此,我们可以将以下代码与 GCC 编译器 C++11 一起使用:
#include<iostream>
#include<vector>
int main(){
// Create a vector containing integers
std::vector<int> v = { 7, 5, 16, 8 };
}
上述代码中的 std 命名空间包含多个 C++ 库。 我们首先显式添加向量库并使用它来初始化 std::vector
C++ 中向量释放的自编码方法
在下面的代码中,我们明确编写了删除向量的命令。 这仅在您使用 new 关键字创建向量时适用。
新操作员发出询问免费商店内存分配的信号。 如果有足够的空间,new 运算符将分配内存,对其进行初始化,然后将新创建和初始化的内存的位置提供给指针变量。
在下面的代码中,我们首先初始化向量指针,然后检查它是否为 NULL。 完成所需的计算后,我们通过断言语句确保向量指针不为空。
然后我们使用delete语句删除向量及其占用的空间。
#include <iostream>
#include <cassert>
#include <vector>
using namespace std;
int main()
{
std::vector<int> *vec = new std::vector<int>;
\\***
assert( vec != NULL);
delete vec;
return 0;
}
使用下面的代码,我们在完成必要的计算后分配一个空向量,从而释放 vec 分配的内存。 命令 std::vector
最后一条语句检查 vec 占用的内存(以字节为单位)。
std::vector<int> vec;
\\***
\\***
vec = std::vector<int>();
std::cout << sizeof(decltype(vec.back())) * vec.capacity() << std::endl;
C++ 中向量释放的动态方式
在 C++ 中,当您在函数内部(即在 {....} 内部)定义 std::vector 对象时,会自动调用向量类构造函数,该构造函数会初始化向量对象。 当函数执行结束时(即到达右括号}),析构函数被自动调用。
例如,
void Foo() {
std::vector<int> v;
...
}
C++ 保证方法执行时将调用 v 的析构函数。 std::vector
的析构函数将确保释放它分配的任何内存。
相关文章
Arduino 复位
发布时间:2024/03/13 浏览次数:315 分类:C++
-
可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。
Arduino 的字符转换为整型
发布时间:2024/03/13 浏览次数:181 分类:C++
-
可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。
Arduino 串口打印多个变量
发布时间:2024/03/13 浏览次数:381 分类:C++
-
可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。