1、复制构造函数、及new空间申请

  复制构造函数,也是构造函数。只在初始化时调用,如果定义对象后赋值,比如,t1=t2,则只是运算符重载,没有调用构造函数。

注意:

(1)复制构造函数是函数的形参是类的对象的引用的构造函数;

(2)用一个已经存在的对象,初始化一个新的同类对象;

(3)系统会自动生成一个默认复制构造函数,将成员一一复制;

(4)类的数据成员包含指针变量,构造函数用 new 为其申请空间,必须在复制构造函数中为新对象申请新的堆空间

#include <iostream>;
#include<string>
using namespace std; class student
{
public:
student(int,char*, int, float);
student(student&);
~student();
void printstu();
private:
int id, age;
char* name;
float score;
};
// 构造函数
student::student(int i, char *c, int a, float s)
{
cout << "Constructing...." << endl;
id = i; age = a;
score = s;
name = new char[strlen(c) + ];
if (name != )
strcpy_s(name, strlen(c) + , c);
}
// 复制构造函数
student::student(student& s)
{
cout << "Copy Constructing...." << endl;
id = s.id; age = s.age;
score = s.score;
name = new char[strlen(s.name) + ];
if (name != )
strcpy_s(name, strlen(s.name) + , s.name);
}
// 析构函数
student::~student()
{
cout << "Destructing..." << endl;
delete []name; // 释放申请的内存空间
name = ;
}
void student::printstu()
{
cout << "学号:" << id << " 姓名:" << name << endl;
cout << "年龄:" << age << " 成绩:" << score << endl;
} void main()
{
student s1(, "wang", , );
s1.printstu();
student s2(s1);// 调用复制构造函数 system("pause");
return;
}

2、浅拷贝、深拷贝

  指对于类或结构体这类复合类型的变量。当类的成员变量中含有指针或引用时,在赋值或初始化过程中,若只修改指针指向,没有开辟新的空间,则是浅拷贝;(因为所指内容空间只有一份,若其中一个变量销毁时,空间释放,则另一个变量就出现指针悬挂问题)。

  深拷贝:开辟另一个内存空间(在堆内存中),将内容复制过去。这样就存在两个内存空间,保存相同内容。

  C++中默认的等号操作符也是浅拷贝,只是把指针的内存地址拷贝了,但没有开辟对应的内存空间。

最新文章

  1. 让easyui 的alert 消息框中的确定按钮支持空格键
  2. How secure FB Messenger is?
  3. .net混淆、反编译工具调查
  4. nginx location在配置中的优先级
  5. (一)MII/MDIO接口详解
  6. Codeforces Round #311 (Div. 2) D. Vitaly and Cycle 图论
  7. nfs安装配置
  8. cs231n spring 2017 lecture8 Deep Learning Networks 听课笔记
  9. OpenCV 直线检测
  10. Asp.Net 将HTML中通过dom-to-image.js标签div内的内容转化为图片保存到本地
  11. 【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)
  12. C++ gui程序附加dos输出窗口
  13. PS中如何提高修改psd图片的效率(自动选择工具)
  14. css计算属性 calc()
  15. Perl文件、目录常用操作
  16. SpringBoot事务管理
  17. java_初始化器
  18. 小白的CTF学习之路2——二进制数据基础与运算(上)
  19. MySQL group replication介绍
  20. 【WPF】样式与模板:鼠标移入/悬浮时按钮的背景色不改变

热门文章

  1. 下一个亿万市场:企业级SaaS服务谁能独领风骚
  2. Python的进程、线程和threading模块
  3. C++之MFC基本设置
  4. [日志] spring boot + logback 日志输出配置
  5. 网络攻防工具介绍——Metasploit
  6. mongodb query index 分析
  7. 4.9版本linux内核的ina220电流检测芯片源码在哪里
  8. swift学习笔记 - swift3.0用GCD实现计时器
  9. jQuery的$.each()遍历checkbox
  10. zip unzip tar 压缩解压