C++编程析构函数拷贝构造函数使用示例详解

 更新时间:2021年11月18日 10:26:39   作者:xr415  
这篇文章主要为大家介绍了C++编程构造函数中析构函数及拷贝构造函数的使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助

首先定义一个类进行操作。

class MM
{
public:
protected:
    int year;
    string name;
}

构造函数在类中默认有一个无参的构造函数

默认的构造函数为 类名(){};这个构造函数

如果直接写了构造函数那么这个构造函数将会没有

构造函数

class MM
{
public:
	//MM() {};//无参构造函数
	MM(int year, string name) :year(year), name(name) {};
	//有参构造函数 在定义对象的时候必须传参数,没参数会报错
	MM(int year, string name)
	{
		this->name = name;
		this->year = year;
	}//这两个是一样的
	MM(int year, string name = "") :year(year) {};
	//因为string 是缺省的 如果写没有构造默认为空
    就是 MM mm(15);这里mm对象year=15 name=“”;
	//缺省只能左边到右边
 protected:
	int year;
	string name;
};

析构函数

MM(){};就是对构建的对象进行销毁

 析构函数的使用是一个自动调用的过程不需要人为进行,当对象的生命周期结束自动释放

 //析构函数需要注意的点

1.当对象存在指针的时候使用析构函数时,析构函数里面需要释放指针的指向

class MM
{
public:
	MM(const char* str)
	{
		strcpy(this->str, str);
	}
	~MM() { delete[] str; };
//这里需要释放str内存不然析构函数只会释放类不会释放str
	
protected:
	int year;
	string name;
	char* str;
};
int main()
{
	MM mm("kkk");
	return 0;
}

如果类中没有指针就不用在析构函数中去释放指针指向

拷贝构造(对对象进行赋值)//直接调用拷贝构造不调用构造函数

	MM mm(15,"kkk");
	//拷贝构造的二种方式对对象进行赋值
	MM mm1(mm);
	MM mm2 = mm;
	mm1.printfMM();
	mm2.printfMM();

如果是通过匿名创建时匿名对象调用构造函数

MM mm3 = MM(16, "jfsdl");
	mm3.printfMM();

然后匿名对象赋值给对象调用的是拷贝构造函数

拷贝构造之深拷贝和浅拷贝

//浅拷贝 默认也是浅拷贝就是赋值拷贝
	MM(const MM&object)
	{
		this->str = object.str;
	}
//深拷贝
//深拷贝就是通过指针申请指向然后进行赋值
	MM(const MM& object)
	{
		int len = strlen(object.str) + 1;
		this->str = new char[len];
		strcpy(str, object.str);
	}

深浅拷贝区别

浅拷贝就是进行了赋值操作

深拷贝是通过申请指针后再进行赋值(深拷贝析构函数要释放申请的指针)

谢谢大家的阅读,如有不足请及时指出,万分感激

以上就是C++编程析构函数拷贝构造函数使用示例详解的详细内容,更多关于C++编程析构函数拷贝构造函数的资料请关注脚本之家其它相关文章!

相关文章

  • C语言经典例程100例(经典c程序100例)

    C语言经典例程100例(经典c程序100例)

    这篇文章主要介绍了C语言经典例程100例,经典c程序100例,学习c语言的朋友可以参考一下
    2018-03-03
  • C语言堆与二叉树的顺序结构与实现

    C语言堆与二叉树的顺序结构与实现

    堆是计算机科学中一类特殊的数据结构的统称,通常是一个可以被看做一棵完全二叉树的数组对象。而堆排序是利用堆这种数据结构所设计的一种排序算法。本文将详细介绍堆与二叉树的顺序结构与实现,需要的可以参考一下
    2022-05-05
  • C语言:传值与传址交换整数

    C语言:传值与传址交换整数

    这篇文章主要给大家介绍了关于C语言中传值与传址之间交换整数的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C语言具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2021-08-08
  • c++ vector对象相关总结

    c++ vector对象相关总结

    这篇文章主要介绍了c++ vector对象的相关资料,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下
    2021-02-02
  • C++基于boost asio实现sync tcp server通信流程详解

    C++基于boost asio实现sync tcp server通信流程详解

    这篇文章主要介绍了C++基于boost asio实现sync tcp server通信的流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • C语言的位段与枚举详解

    C语言的位段与枚举详解

    这篇文章主要为大家详细介绍了C语言的位段与枚举,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 通俗易懂的C语言快速排序和归并排序的时间复杂度分析

    通俗易懂的C语言快速排序和归并排序的时间复杂度分析

    这篇文章主要为大家通俗易懂的讲解了C语言快速排序和归并排序的时间复杂度分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 探究一下C语言生成随机数的奥秘

    探究一下C语言生成随机数的奥秘

    C语言中生成随机数是一项非常重要的功能,因为许多现代应用程序需要使用随机数。本文就来带大家一起探究一下C语言生成随机数的奥秘吧
    2023-03-03
  • VC中LINK 2001 和 LINK 2009 的错误的解决方法

    VC中LINK 2001 和 LINK 2009 的错误的解决方法

    最近将两个开源C++项目编译成windows版本的时候遇到很多问题,编译的时候总是报错,报的最多的是无法解析的外部符号”,经过近3天的折腾总算都通过了,这里是一些总结
    2020-10-10
  • 如何判断一个整数的二进制中有多少个1

    如何判断一个整数的二进制中有多少个1

    本篇文章是对如何判断一个整数的二进制中有多少个1的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05

最新评论