拷贝构造函数调用时机

什么时候调用拷贝构造函数

1. 当用类的一个对象去初始化该类的另一个对象时,系统会自动调用拷贝构造函数

例如 Human h2(h1)和Human h2=h1。注意是初始化不是赋值,如果h2已经初始化,然后用h2=h1的话相当于将h1赋值给h2,这时候调用的是赋值构造函数.

2. 将一个对象作为实参传递给一个非引用类型的形参,系统会自动调用拷贝构造函数

Human& test6(Human man) {
	return man;
}
Human h1;
test6(h1);

3 从一个返回类为非引用的函数返回一个对象时,系统会自动调用拷贝构造函数

Human test5(Human &man) {
	return man;
}
Human h1;
test5(h1);

 拷贝构造函数如下

Human::Human(const Human& man) {
	cout << "调用自定义的拷贝构造函数" << "参数:" << &man
		<< " 本对象:" << this << endl;

	age = man.age;      //this是一个特殊的指针,指向这个对象本身
	salary = man.salary;
	name = man.name;
	// 深度拷贝
	addr = new char[64];
	strcpy_s(addr, 64, man.addr);
}

 根据上面描述的拷贝构造函数调用时机,我们可以判断他们的调用拷贝构造函数的情况如下

 

但是当我们运行的时候会发现Human h3 = test5(h1);这行代码只调用一次 

 

扫描二维码关注公众号,回复: 17025924 查看本文章

这是因为返回类为非引用的函数返回一个对象时,赋值给另外一个对象时编译器会优化,这时候返回值的时候调用拷贝构造函数,但是赋值给对象不会调用拷贝构造。

猜你喜欢

转载自blog.csdn.net/lxyhhhhhcl/article/details/132475696