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(){};就是对构建的对象进行销毁
析构函数的使用是一个自动调用的过程不需要人为进行,当对象的生命周期结束自动释放
//析构函数需要注意的点
【C++编程析构函数拷贝构造函数使用示例详解】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++编程析构函数拷贝构造函数的资料请关注脚本之家其它相关文章!
推荐阅读
- opencv|opencv C++模板匹配的简单实现
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- HTML基础--基本概念--跟着李南江学编程
- 我的软件测试开发工程师书单
- c++基础概念笔记
- 芯灵思SinlinxA33开发板Linux内核定时器编程
- 关于响应式编程的十个问题
- iOS-Swift-map|iOS-Swift-map filter reduce、函数式编程
- 零基础学习Python作业本(13)