~
符号。#include <iostream> using namespace std; class VLA{ public: VLA(int len); //构造函数 ~VLA(); //析构函数 public: void input(); //从控制台输入数组元素 void show(); //显示数组元素 private: int *at(int i); //获取第i个元素的指针 private: const int m_len; //数组长度 int *m_arr; //数组指针 int *m_p; //指向数组第i个元素的指针 }; VLA::VLA(int len): m_len(len){ //使用初始化列表来给 m_len 赋值 if(len > 0){ m_arr = new int[len]; /*分配内存*/ } else{ m_arr = NULL; } } VLA::~VLA(){ delete[] m_arr; //释放内存 } void VLA::input(){ for(int i=0; m_p=at(i); i++){ cin>>*at(i); } } void VLA::show(){ for(int i=0; m_p=at(i); i++){ if(i == m_len - 1){ cout<<*at(i)<<endl; } else{ cout<<*at(i)<<", "; } } } int * VLA::at(int i){ if(!m_arr || i<0 || i>=m_len){ return NULL; } else{ return m_arr + i; } } int main(){ //创建一个有n个元素的数组(对象) int n; cout<<"Input array length: "; cin>>n; VLA *parr = new VLA(n); //输入数组元素 cout<<"Input "<<n<<" numbers: "; parr -> input(); //输出数组元素 cout<<"Elements: "; parr -> show(); //删除数组(对象) delete parr; return 0; }运行结果:
~VLA()
就是 VLA 类的析构函数,它的唯一作用就是在删除对象(第 53 行代码)后释放已经分配的内存。~
符号,在析构函数的名字中出现的~
可以认为是一种特殊情况,目的是为了和构造函数的名字加以对比和区分。#include <iostream> #include <string> using namespace std; class Demo{ public: Demo(string s); ~Demo(); private: string m_s; }; Demo::Demo(string s): m_s(s){ } Demo::~Demo(){ cout<<m_s<<endl; } void func(){ //局部对象 Demo obj1("1"); } //全局对象 Demo obj2("2"); int main(){ //局部对象 Demo obj3("3"); //new创建的对象 Demo *pobj4 = new Demo("4"); func(); cout<<"main"<<endl; return 0; }运行结果:
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有