C++ 默认、拷贝、移动构造函数

#include <iostream>
using namespace std;

struct Test {
	/*因为写了构造函数,所以要想默认构造的话必须自己定义*/
	Test(){//默认构造函数
		cout << "Test" << endl;
	}
	Test(const Test const &)//拷贝构造函数
	{
		//Test前面的const只是限制了对Test对象的修改,所以加了const限制仍然是拷贝构造函数
		//&前面的const可有可无,因为引用本来就是const的(注意引用的对象不一定是const的)
		cout << "Test&" << endl;
	}
	Test(const Test const &&) noexcept//移动构造函数,移动不可能抛出异常应该标记noexcept
	{
		cout << "Test&&" << endl;
	}
};
int main() {
	Test t, t2 = t, t3 = move(t2);
	//一旦自己写了任何构造函数(包括拷贝移动构造),那么就删除默认构造函数。
	// 
	//拷贝移动构造只需要一个参数分别是T&和T&&,T是否const无所谓,该参数只管接受。
	//引用本身是否const都无意义,因为引用必须且只能初始化一次;
}
/*
Test
Test&
Test&&
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
静态拷贝构造函数(static copy constructor)和移动构造函数(move constructor)是 C++ 中用于对象的复制和移动的特殊成员函数。 拷贝构造函数(copy constructor)用于创建一个新对象,该对象与已经存在的对象具有相同的值。静态拷贝构造函数是指不需要修改成员变量的拷贝构造函数,通常是拷贝成员变量值的过程。 移动构造函数(move constructor)则用于将资源从一个对象转移到另一个对象,通常是在源对象不再被使用时将其资源转移到目标对象,这样可以避免不必要的复制操作,提高性能。移动构造函数通常使用右值引用参数(&&)来接收源对象。 在 C++11 中引入了右值引用和移动语义的概念,允许程序员通过移动语义来提高代码的效率。对于可移动的对象,应该尽可能地使用移动语义来避免不必要的拷贝操作。 如果没有显式定义静态拷贝构造函数或移动构造函数,编译器会自动生成默认拷贝构造函数和移动构造函数。但如果类中包含了指针成员变量或资源管理类等需要特殊处理的情况,就需要手动定义这两个函数。 请注意,静态拷贝构造函数和移动构造函数是两个不同的概念,静态拷贝构造函数并不具备移动语义。移动构造函数通常会采用右值引用参数,而静态拷贝构造函数则通常采用常量引用参数。 这就是关于静态拷贝构造函数和移动构造函数的一些介绍,希望能对你有所帮助。如果有任何疑问,请随时追问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值