如果不自定义拷贝函数,C++会默认浅拷贝
#include <iostream>
using namespace std;
class Acc
{
private:
// 属性
string name {"acc"};
double *balance {nullptr};
public: //外部调用
// 获取属性
string get_name(){return name;}
double get_balance(){return *balance;}
// 构造函数
Acc(string name="None", double balance=0.0);
//析构函数
~Acc();
// 拷贝构造函数
Acc(const Acc &source);
};
Acc::Acc(string name, double balance)
{
this->name = name;
this->balance = new double {balance};
cout << "2个参数的构造函数被调用" << name << endl;
}
Acc::~Acc()
{
if (balance != nullptr)
delete balance;
cout << "析构函数调用" << name << endl;
}
// 拷贝构造函数:根据已存在的对象来更新 新对象的属性(name, balance)
Acc::Acc(const Acc &source)
// 便捷写法 代理
// :Acc{source.name, *source.balance}
{
// 浅拷贝 会报错 原因是释放2次同一块内存
// this->balance = source.balance;
// 深拷贝 不会报错 原因是释放2次 二块 不同的内存
this->balance = new double {*source.balance};
this->name = source.name;
cout << "拷贝函数被调用,是" << source.name << "的拷贝"<< endl;
};
// 查看一下全部属性
void print_Info(Acc acc){
cout << acc.get_name() << " " << acc.get_balance() << endl;
}
int main()
{
// 1.值传递的方式给函数传递参数
// Acc a1;
// print_Info(a1);
// 2.基于已存在的对象创建新对象
Acc a2{"a2", 100.0};
Acc a3{a2}; // 直接复制
return 0;
}