构造函数-深拷贝与浅拷贝

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 //构造函数(拷贝构造函数),析构函数,
 5 /*深拷贝:是指编译器给类提供定默认拷贝构造函数拷贝含有指针成员对象时,
 6          调用默认析构函数多次释放堆中同一块内存,导致内存访问异常。
 7
 8 解决办法:自定义拷贝构造函数,针对指针成员,
 9          用new关键字开辟另一块堆内存,存放拷贝对象的指针成员。
10 */
11 class Student
12 {
13 public:
14
15     Student() {}
16     //默认析构函数
17     /*
18     Student( Student &stu)
19     {
20         m_age = stu.m_age;
21         p = stu.p;
22     }
23     */
24
25     //自定义析构函数
26     Student(const Student &stu)
27     {
28         m_age = stu.m_age;
29         p = new int(*stu.p);
30     }
31
32     void showStudent()
33     {
34         cout << m_age << endl;;
35         cout << *p << endl;
36         cout << "" << endl;
37     }
38 //private:
39     int m_age;
40     int *p;
41
42 };
43
44 int main()
45 {
46     int a = 6;
47     //Student s1(10,&a) 错误操作,自定义析构函数之后,编译器不再提供默认普通构造函数来初始化;
48     Student s1;
49     s1.m_age = 10;
50     s1.p = &a;
51
52     Student s2=s1;
53     s1.showStudent();
54     s2.showStudent();
55
56     system("pause");
57     return 0;
5//构造函数

原文地址:https://www.cnblogs.com/rtblogs/p/12001246.html

时间: 2024-10-10 02:23:10

构造函数-深拷贝与浅拷贝的相关文章

【转载】C++拷贝构造函数(深拷贝,浅拷贝)

对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. #include <iostream>using namespace std;class CExample {private:     int a;public:     CExample(int b)     { a=b;}     void Show ()     {        cout<

【转】 c++拷贝构造函数(深拷贝,浅拷贝)详解

c++拷贝构造函数(深拷贝,浅拷贝)详解 2013-11-05 20:30:29 分类: C/C++ 原文地址:http://blog.chinaunix.net/uid-28977986-id-3977861.html 一.什么是拷贝构造函数      首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.  下面看一个类对象拷贝的简单例子. #include<iostream

C++拷贝构造函数(深拷贝,浅拷贝)

http://www.cnblogs.com/BlueTzar/articles/1223313.html 对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. 1 #include <iostream> 2 using namespace std; 3 4 class CExample { 5 private: 6 int a; 7 public: 8

c++拷贝构造函数(深拷贝,浅拷贝)详解

一.什么是拷贝构造函数      首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.  下面看一个类对象拷贝的简单例子. #include<iostream> using namespace std; class CExample { private: int a; public: //构造函数 CExample(int b) { a=b; printf("con

拷贝构造函数(深拷贝vs浅拷贝)

类对象之间的初始化是由类的拷贝构造函数完成的.它是一种特殊的构造函数,它的作用是用一个已知的对象来初始化另一个对象.如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的位拷贝.位拷贝又称浅拷贝. 一.拷贝构造函数定义格式 类名::拷贝构造函数名(类名& 引用名) 例如: Tdate ::Tdate(Tdate & d); //形参是一个对象的引用 CString( const CString & stringSrc );

c++拷贝构造函数(深拷贝、浅拷贝)——转

拷贝构造函数: 拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类的一个引用变量,该参数是const类型,不可变的.例如:类A的拷贝构造函数的形式为A(A& x).当用一个已经初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝函数就会被自动调用.也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用.以下情况会自动调用拷贝构造函数: 1.一个对象以值传递的方式传入函数体 2.一个对象以值传递的方式从函数返回,如下: #include <io

C++文件头,命名空间,new和delete,内联函数,引用,函数重载,构造函数和析构函数,深拷贝和浅拷贝,explict,this指针

 目  录 1       开始学习C++.............................................................................................................. 4 1.1       C++的头文件.................................................................................................

C++拷贝构造函数(深拷贝与浅拷贝)

转自http://blog.csdn.net/lwbeyond/article/details/6202256/ 一. 什么是拷贝构造函数 对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. 1 #include <iostream> 2 using namespace std; 3 4 class CExample { 5 private: 6 in

C++ Primer笔记9_构造函数_拷贝构造(深拷贝与浅拷贝)

1.构造函数: >构造函数是一个特殊的.与类同名的成员函数,用于给每一个成员设置适当的初始值. >构造函数不能有返回值,函数名与类名同样. >缺省构造函数时,系统将自己主动调用该缺省构造函数初始化对象,缺省构造函数会将全部数据成员都初始化为零或       空.缺省构造函数是不带參数的构造函数. >创建一个对象时,系统自己主动调用构造函数. 构造函数的特点: 1.构造函数能够重载,传入什么实參决定调用不同版本号的构造函数. 2.构造函数不能声明为const .也不能声明为virtu