C++ 构造函数_析构函数
什么是析构函数
如果说构造函数是对象来到世间的第一声哭泣,那么析构函数就是对象死亡前的最后遗言。
析构函数在对象销毁时会被自动调用,完成的任务是归还系统的资源。
特性:
1、如果没有自定义的析构函数,则系统自动生成
2、析构函数在对象销毁时自动调用
3、析构函数没有返回值、没有参数也不能重载

定义格式
~类名()
例如:
class Student
{
public:
Student() {cout<<"Student"<<endl;}
~Student() {cout<<"~Student"<<endl;} // 析构函数不允许加任何参数
private:
string m_strName;
}
定义析构函数的必要性
class Student
{
public:
Student() {m_pName = new char[];}
~Student() {m_pName = new char[20];}
private:
char *m_pName;
}
我们在定义 m_pName 这个变量时,没有用string类型的数组,而是用char类型的指针,并且在函数的定义中,我们把这个指针指向了一个堆中的内存。当这块空间被使用完后,如果没有被释放,那么就会造成内存的泄漏。要释放掉这些内存的最好时机就是在对象被销毁之前。
代码示例
#include <iostream>
#include <stdlib.h>
#include <string>
#include "Teacher.h"
using namespace std; /*************************************************************************
Teacher类
自定义析构函数
普通方式实例化对象,在销毁对象时是否自动调用析构函数
通过拷贝构造函数实例化对象,在销毁对象时是否自动调用析构函数 数据成员:
姓名
年龄 成员函数:
数据成员的封装函数 *************************************************************************/
class Teacher
{
public:
// 声明构造函数,参数给定默认值
Teacher(string name = "cjj",int age = ); // 声明拷贝构造函数
Teacher(const Teacher &tea); // 声明析构函数
~Teacher(); // 声明成员函数,把所有的成员函数都罗列出来
void setName(string _name);
string getName();
void setAge(int _age);
int getAge(); private:
string m_strName;
int m_iAge; }; // 定义构造函数,使用初始化列表,初始化构造函数的参数
Teacher::Teacher(string name,int age):m_strName(name),m_iAge(age)
{
cout << "Teacher(string name,int age)" << endl;
}
// 定义拷贝构造函数
Teacher::Teacher(const Teacher &tea)
{
cout<<"Teacher::Teacher(const Teacher &tea)"<<endl;
}
// 定义析构函数
Teacher::~Teacher(){cout<<"证明析构函数被调用"<<endl;} // 类外定义,写出成员函数的函数体
void Teacher::setName(string _name)
{
m_strName = _name;
}
string Teacher::getName()
{
return m_strName;
}
void Teacher::setAge(int _age)
{
m_iAge = _age;
}
int Teacher::getAge()
{
return m_iAge;
} int main(void)
{
Teacher t1; // 从栈中实例化对象
Teacher *p = new Teacher(); // 从堆中实例化对象
delete p;
Teacher t2(t1); system("pause");
return ;
}
C++ 构造函数_析构函数的更多相关文章
- C++_构造函数与析构函数
构造函数与析构函数 OOP第二课 1 构造函数 1.1 构造函数具有一些特殊的性质 1.2 定义构造函数的一般形式 1.3 利用构造函数创建对象 2 成员初始化表 3 缺省参数的构造函数 4 重载构造 ...
- .NET 基础 一步步 一幕幕[面向对象之构造函数、析构函数]
构造函数.析构函数 构造函数: 语法: //无参的构造函数 [访问修饰符] 函数名() :函数名必须与类名相同. //有参的构造函数 [访问修饰符] 函数名(参数列表):函数名必须与类名相同. 作用: ...
- 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)
[源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...
- C++构造函数、析构函数与抛出异常
[本文链接] http://www.cnblogs.com/hellogiser/p/constructor-destructor-exceptions.html [问题] 构造函数可以抛出异常么?析 ...
- python中的构造函数和析构函数
python中的特殊方法,其中两个,构造函数和析构函数的作用: 比说“__init__”这个构造函数,具有初始化的作用,也就是当该类被实例化的时候就会执行该函数.那么我们就可以把要先初始化的属性放到这 ...
- 内存的分配VS回收&构造函数VS析构函数
之前有一个问题一直困扰着我,就是一个变量出了作用域,我以为这个变量的内存就被回收了,其实不是这样的,昨天问了一个高手,才豁然开朗,自己在看相关代码的反汇编代码,才知道原来真是这样就.这个问题,我想简单 ...
- C++C++中构造函数与析构函数的调用顺序
http://blog.csdn.net/xw13106209/article/details/6899370 1.参考文献 参考1: C++继承中构造函数.析构函数调用顺序及虚函数的动态绑定 参考2 ...
- php 的 构造函数 和 析构函数
构造函数 在C++ java里的应用及其普遍,今天好好研究了一下 php 的 构造函数 和 析构函数 构造函数 和 析构函数 构造函数 void __construct ([ mixed $args ...
- C++-理解构造函数、析构函数执行顺序
先初始化序列中的函数调用,如果基类构造函数为非引用传递,则引起参数的拷贝构造 再: 先类内的成员构造函数(拷贝/默认),再类的构造函数:先基类,再派生类: 本文主要说明对象创建时构造函数的执行顺序,对 ...
随机推荐
- pytorch 从入门到实战
一.安装 按照 http://pytorch.org 官网上的说明来做,遇到了几个坑.记录如下: 1.用 conda 安装 pytorch 时,下载安装包非常慢,无法忍受. 解决办法:用蓝灯FQ,将蓝 ...
- luogu p1101 单词方阵
https://www.luogu.org/problem/show?pid=1101 很恶心的代码 就是八个方向都搜索 #include<bits/stdc++.h> using na ...
- [转]手机web HTML头信息解释和viewport meta标签解释
<meta charset="utf-8" /> <link rel="shortcut icon" href="favicon.i ...
- POJ 1014 Dividing(多重背包+二进制优化)
http://poj.org/problem?id=1014 题意:6个物品,每个物品都有其价值和数量,判断是否能价值平分. 思路: 多重背包.利用二进制来转化成0-1背包求解. #include&l ...
- Android -- 在一个Activity开启另一个Activity 并 获取他的返回值。
1. 视图示例, 按选择弹出 2界面, 选择选项 回显到1 2. 示例代码 MainActivity.java, 第一个activity public class MainActivity e ...
- codeforces 98 div2 C.History 水题
C. History time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- linux文件锁的应用,POSIX,unix标准,linux标准
1. perl,flock加锁.java也能加锁. 2. 先创建文件并打开,才能加锁(写打开?). 3. 可以用于判断进程是否一直在运行(用另一进程判断),如果锁一直在,则进程在:锁不在,则原进程或意 ...
- 2-10~2-11 配置iptables防火墙增强服务 selinux简单讲解
学习一个服务的过程: 1.此服务器的概述:名字,功能,特点,端口号 2.安装 3.配置文件的位置 4.服务启动关闭脚本,查看端口 5.此服务的使用方法 6.修改配置文件,实战举例 7.排错(从下到上, ...
- Holt-Winters模型原理分析
Holt-Winters模型原理分析及代码实现(python) from:https://blog.csdn.net/u010665216/article/details/78051192 引言 最近 ...
- 049——VUE中使用animation与transform实现vue的动画效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...