c++知识学习 (2)
2014-01-08 18:27
316 查看
析构函数
析构函数是在对象所占内存释放时调用的,通常用来释放相关的资源。
析构函数就是一个特殊的类成员函数,与构造函数相反。
析构函数的名字是在类名前面加上波浪线~。
它不返回任何值也没有任何参数,不能被重载。
类如:
~Person()
Person.h
Person.cpp
main.cpp
输出:
call the functon Person()
a man
20
m
60
call the functon Person()
a man
20
m
60
call the functon ~Person()析构函数
call the functon ~Person()析构函数
一定要记得在释放堆中分配的内存。
析构函数是在对象所占内存释放时调用的,通常用来释放相关的资源。
析构函数就是一个特殊的类成员函数,与构造函数相反。
析构函数的名字是在类名前面加上波浪线~。
它不返回任何值也没有任何参数,不能被重载。
类如:
~Person()
Person.h
// // Person.h // ArrayTest // // Created by 张学院 on 14-1-8. // Copyright (c) 2014年 com.mix. All rights reserved. // //防止重复引用 #ifndef __ArrayTest__Person__ #define __ArrayTest__Person__ #include <iostream> using namespace std; class Person{ //---------成员变量-------- public : int age; private : int weight; char * name; char sex; //---------成员方法-------- public: //----构造函数------- Person(); //-----构造函数重载----- Person(int age); void setWeight(int weight); int getWeight() const; //char * getName() const; //const 指针,保证指针不被修改 const char * getName() const; void info() const; ~Person(); }; #endif /* defined(__ArrayTest__Person__) */
Person.cpp
// // Person.cpp // ArrayTest // // Created by 张学院 on 14-1-8. // Copyright (c) 2014年 com.mix. All rights reserved. // #include "Person.h" //------方法实现格式------ //----返回值 类::方法名 (参数)------ void Person::setWeight(int weight){ //-----this 代表 this->weight=weight; } //--------const 编译限制------- int Person::getWeight() const{ //weight++;报错 return weight; } const char * Person::getName() const{ return name; } void Person::info() const{ printf("%s\n%d\n%c\n%d\n",name,age,sex,weight); } //--------构造函数:初始化成员变量------------ Person::Person(){ printf("call the functon Person()\n"); //name 改成指针的时候 name 没有有效地址 。strcpy 报错 //strcpy(name, "a man"); //在堆里分配内存,返回首地址,在堆里面分配的空间一定要记得释放内存!!!!! name = new char[255]; strcpy(name, "a man"); weight=60; age=20; sex='m'; } //--------构造函数:重载------------ Person::Person(int age){ printf("call the functon Person(int age)\n"); //name 改成指针的时候 name 没有有效地址 。strcpy 报错 //strcpy(name, "a man"); name = new char[255]; strcpy(name, "a man"); weight=60; this->age=age; sex='m'; } //-----------析构函数--------- Person::~Person(){ //在析构函数里面释放内存 delete [] name; printf("call the functon ~Person()析构函数 \n"); }
main.cpp
// // main.cpp // ArrayTest // // Created by 张学院 on 14-1-6. // Copyright (c) 2014年 com.mix. All rights reserved. // #include <iostream> #include <string> #include "Person.h"; int main() { //---栈分配:函数结束,per出栈,内存释放之前,调用析构函数------- Person per= Person(); per.info(); //-----堆分配:必须手动是否内存------- Person *per1= new Person(); per1->info(); //不调用delete per1;不会调用析构函数 delete per1; return 0; }
输出:
call the functon Person()
a man
20
m
60
call the functon Person()
a man
20
m
60
call the functon ~Person()析构函数
call the functon ~Person()析构函数
一定要记得在释放堆中分配的内存。
相关文章推荐
- C++中对Lib及Dll的链接调用
- c++类的构造函数
- c++的参数传递
- c++的this指针
- c++的const详解
- 迭代器
- c++的vector容器
- c++的string容器
- 调试工具之assert和ndebug
- c语言的位操作
- 最常用的设计模式---观察者模式(C++实现)
- C/C++宏
- boost使用(七)
- c++知识学习 (1)
- C++异常处理解析3: 错误处理(返回值, 错误标志变量, 异常)各有千秋
- AES128 + cbc + pkcs7 编码C语言实现
- TinyXML来操作XML文件(C++)<二>
- C语言编程细节
- C++小知识之指针和引用的区别
- C++小知识之指针和引用的区别