拷贝函数

拷贝函数

在class中手动写入拷贝构造函数, 以及拷贝赋值函数;
当然也会相应的阻止编译成调用这两个函数;

#include <iostream>
#include <cstdlib>
#include <string>
#include <utility>
#include <vector>

//聚合类
struct T0
{
	int x;
	std::string str;
	std::vector<int > ve;
};
T0 t0 = { 1, "abc" };


//委托构造函数;
class T1
{
public:
	T1() : x(0), str(" ") {}
	T1(int X) : T1() { x = X; }
	T1(std::string st) : T1(1) { str = st; }
private:
	int x;
	std::string str;
};


//拷贝构造函数;
//拷贝构造函数被用来初始化非引用类类型参数, 所以拷贝构造函数加上 (const P &) ;
class T2
{
public:
	T2() : x(0), str(" ") {}
	T2(const T2 &t2) : x(t2.x), str(t2.str) {}
	//T2(const T2 &t2) {x = t2.x; str = t2.str; }
private:
	int x;
	std::string str;
};


//拷贝赋值函数;
//赋值运算符要有一个 operator = (const P &) ;
//要求其返回值是左侧运算对象的引用  &operator = ...;
class T3
{
public:
	T3() : x(0), str(" ") {}
	T3 &operator = (const T3 &t3)
	{
		x = t3.x;
		str = t3.str;
		return *this;
	}

private:
	int x;
	std::string str;
};
/*
T3& T3::operator = (const T3 &t3)
{
x = t3.x;
str = t3.str;
return *this;
}
*/



//析构函数;
//成员按初始化顺序的逆序依次被销毁;
//析构函数本身不直接销毁成员;
//但是当一个函数的引用或者指针离开时, 析构函数不会执行;
class T4
{
public:
	T4() : x(0), str(" ") {}
	~T4() {}
private:
	int x;
	std::string str;
};



//default : 执行默认行为;
//构造函数只能有一个 default 默认行为;
//只能对合成版本的成员使用 default ;
//当default 在函数里面, 为内联, 在外部 default 为外联;
class T5
{
public:
	T5() = default;
	T5(const T5 &) = default;					//内联;
	T5 & operator = (const T5 &);
	~T5() = default;
private:
	int x;
	std::string str;
};
T5 & T5::operator = (const T5 &) = default;		//外联;



//防止执行拷贝;
//两种方法阻止拷贝进行 : 1.使用delete, 2.将其放入private中, 不能访问; 一般使用delete;
//当拷贝构造函数在时, 一定会有拷贝赋值函数, 反之也是;												
class T6
{
public:
	T6() = default;
	T6(const T6 &) = delete;
	T6 & operator = (const T6 &) = delete;
	~T6() = default;
private:
	int x;
	std::string str;

	//T6(const T6 &);
	//T6 & operator = (const T6 &);
};

int main()
{
	//无法执行拷贝构造函数, 也就是此函数无法赋值, 拷贝给其他函数;
	/*T6 t6;
	T6 t = t6;*/


	system("pause");
	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值