以*this返回局部对象的两种情况

1、以值返回局部对象

class Person {
public:
	Person(int age) {
		this->age = age;
	}
	// 以值方式返回局部对象会调用拷贝构造生成一个新的对象返回
	Person PersonAddPerson(Person p) {
		this->age += p.age;
		return *this;
	}
	int age;
};

void test01() {
	Person p1(10);
	cout << "p1.age = " << p1.age << endl;

	Person p2(10);
	p2.PersonAddPerson(p1).PersonAddPerson(p1);
	cout << "p2.age = " << p2.age << endl;
}

 *this指对象本身,return一个对象且以值返回,会在return时用拷贝构造函数生成一个复制品,然后返回这个复制品,其返回的对象本身并不是对象本身。 p2.PersonAddPerson(p1).PersonAddPerson(p1);而这段代码在第一次执行PersonAddPerson(p1)时返回的是另一个对象,然后拿这另一个对象再执行PersonAddPerson(p1)时,其又返回另另一个对象。

2、以引用返回局部对象

	Person& PersonAddPerson(Person p) {
		this->age += p.age;
		return *this;
	}

 而以引用返回局部对象时,不会调用拷贝构造函数,其返回对象本身为对象本身。

posted @ 2025-10-15 20:37  秋秋秋秋秋寒  阅读(3)  评论(0)    收藏  举报