c++拷贝函数基础使用方法

在 C++ 中,拷贝函数(copy constructor)是一种特殊的构造函数,用于创建一个对象并将其初始化为另一个同类型的对象。当我们以某个类型的对象作为另一个同类型对象的实参时,拷贝函数会被自动调用。C++ 中的拷贝函数有以下两种形式:

  1. 默认拷贝函数

默认情况下,C++ 会自动生成一个默认的拷贝函数。此函数执行逐个成员变量的拷贝操作,没有额外的工作。下面是一段使用默认拷贝函数的示例代码:

#include <iostream>
using namespace std;
​
class Point {
public:
  int x, y;
  Point() { x = 0; y = 0; }  // 默认构造函数
};
​
int main() {
  Point p1;
  
  // 使用默认拷贝函数
  Point p2 = p1;
​
  return 0;
}

在以上代码中,由于没有定义 Point 类的拷贝函数,因此编译器将使用默认拷贝函数进行拷贝操作。

  1. 自定义拷贝函数

如果需要执行特定的内存分配或其他操作,我们可以自定义拷贝函数以替换默认拷贝函数。自定义拷贝函数通常具有以下形式:

类名(const 类名 &obj) {
  // 拷贝构造函数体
}

其中 类名 表示要拷贝的对象类型,const 类名 &obj 表示拷贝一个常量引用类型的 obj 参数。以下是一个自定义拷贝函数的示例代码:

#include <iostream>
using namespace std;
​
class Point {
public:
  int x, y;
  Point() { x = 0; y = 0; }  // 默认构造函数
  Point(int a, int b) { x = a; y = b; }
  
  // 自定义拷贝函数
  Point(const Point &obj) { 
    x = obj.x + 1;
    y = obj.y + 1;
  }
};
​
int main() {
  Point p1(1, 2);
  
  // 使用自定义拷贝函数
  Point p2 = p1;
​
  cout << p1.x << ", " << p1.y << endl;   // 1, 2
  cout << p2.x << ", " << p2.y << endl;   // 2, 3
​
  return 0;
}

在以上代码中,我们通过自定义拷贝函数实现了从 p1p2 的拷贝操作。拷贝函数采用常量引用作为输入参数,并执行了特定的逻辑以生成新的对象。

需要注意的是,在类的析构函数中使用动态内存分配时,我们必须对自定义的拷贝函数进行更加谨慎的设计和调试,以避免产生内存泄漏或重复释放等问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值