析构函数

本文详细介绍了C++中的析构函数和拷贝构造函数。析构函数用于资源的反初始化和释放,防止内存泄漏,其调用时机在对象生命周期结束时。拷贝构造函数则在对象复制时被调用,用于深拷贝和浅拷贝的概念。当对象含有动态分配的资源时,需要重写拷贝构造函数以避免错误的资源管理。同时,文章提到了浅拷贝可能导致的问题及何时需要自定义拷贝构造函数。
摘要由CSDN通过智能技术生成

析构函数:构造与析构是相反的过程

析构函数的调用:https://www.bilibili.com/video/BV1jJ411279W/?spm_id_from=trigger_reload

#include "stdfx.h"
//函数是在栈上面的,栈上的局部对象调用时机
//构造:声明该对象是构造
//析构:对象出作用域时

//全局对象的调用时机
//在main之前构造
//在main之后析构
//析构函数:
//1.作用:完成资源的反初始化,资源的释放,避免内存泄露
//2.析构函数的写法:
//    1)类名前~
//    2)通常由编译器决定调用时机,不需要手动
//    3)析构函数没有参数以及返回值
//3.析构函数不能重载
//通常情况下,构造析构变为公有



class CStudent() {
public:
    //构造函数
    CStudent() {
//为了m_szName创建一个堆空间(分配动态内存)
m_szName = (char*)malloc(255);
//free(m_szName);
};
//析构函数
~CStudnet() {
    printf("");
};
CStudent(char* pName,int nLength){
//为了m_szName创建一个堆空间(分配动态内存)
if(nLength >255){
return;
}
m_szName = (char*)malloc(255);
if(m_szName == nullptr){
return;
}
memcpy(m_szName,pName,nLength);
};

void SetName(char* pszName){
    strcpy_s(m_szName,pszName);
}
privatre:
    int m_nStuID;
    char* m_szName;//名字 char m_szName[255]
};

CSstudent g_stu;    //全局对象

int main()
{
 CStudnet stu("张三",strlen("张三")+1);
//拷贝构造函数:
//1.作用:本质上也是一种构造函数
//2.调用机制 当用一个对象给创建另外一个对象,赋值时调用
//3.缺省的拷贝构造函数的作用(完全把对象1拷贝到对象2 memcpy)
 CStudnet stu2 = stu;
//stu.~CStudnet();    //一般情况不需要手动调用
return 0;
}

拷贝构造函数注意事项:

浅拷贝和深拷贝

浅拷贝:默认的拷贝构造函数(使用的内存相同)

深拷贝:仅把内容赋值给B

何时需要从写拷贝构造函数:

若对象中的成员函数存在一种需要分配的资源时,为了避免在析构时重复释放,需要从写拷贝构造函数或禁用。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值