C++ 拷贝构造函数(初学有点难理解)
拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:
-
通过使用另一个同类型的对象来初始化新创建的对象。
-
复制对象把它作为参数传递给函数。
-
复制对象,并从函数返回这个对象。
如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。拷贝构造函数的最常见形式如下:
classname (const classname &obj) { // 构造函数的主体 }
在这里,obj 是一个对象引用,该对象是用于初始化另一个对象的。
1 #include <iostream>
2 using namespace std;
3
4 class Line
5 {
6 public:
7 int getLength( void );
8 Line( int len ); // 简单的构造函数
9 Line( const Line &obj); // 拷贝构造函数
10 ~Line(); // 析构函数
11
12 private:
13 int *ptr;
14 };
15
16 // 成员函数定义,包括构造函数
17 Line::Line(int len)
18 {
19 cout << "调用构造函数" << endl;
20 // 为指针分配内存
21 ptr = new int;
22 *ptr = len;
23 }
24
25 Line::Line(const Line &obj)
26 {
27 cout << "调用拷贝构造函数并为指针 ptr 分配内存" << endl;
28 ptr = new int;
29 *ptr = *obj.ptr; // 拷贝值
30 }
31
32 Line::~Line(void)
33 {
34 cout << "释放内存" << endl;
35 delete ptr;
36 }
37 int Line::getLength( void )
38 {
39 return *ptr;
40 }
41
42 void display(Line obj)
43 {
44 cout << "line 大小 : " << obj.getLength() <<endl;
45 }
46
47 // 程序的主函数
48 int main( )
49 {
50 Line line1(10);
51
52 Line line2 = line1; // 这里也调用了拷贝构造函数
53
54 display(line1);
55 display(line2);
56
57 return 0;
58 }
运行结果:
调用构造函数 调用拷贝构造函数并为指针 ptr 分配内存 调用拷贝构造函数并为指针 ptr 分配内存 line 大小 : 10 释放内存 调用拷贝构造函数并为指针 ptr 分配内存 line 大小 : 10 释放内存 释放内存 释放内存
看这个可能更好理解: https://www.cnblogs.com/uacs2024/p/17956948
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!