c++ 函数返回值 深拷贝
时间: 2023-11-30 09:41:08 浏览: 149
C++ 类的深拷贝
C++函数返回值的深拷贝是指在函数返回时,返回值对象会被完全复制一份,包括其成员变量和指针所指向的内存空间。这种方式会导致内存空间的浪费和程序效率的降低。
下面是一个简单的例子,演示了C++函数返回值的深拷贝:
```c++
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
Person(string name, int age) : name_(name), age_(age) {}
Person(const Person& other) : name_(other.name_), age_(other.age_) {
cout << "Copy constructor called." << endl;
}
string GetName() const { return name_; }
int GetAge() const { return age_; }
private:
string name_;
int age_;
};
Person GetPerson() {
Person p("Tom", 20);
return p;
}
int main() {
Person p1 = GetPerson();
cout << "Name: " << p1.GetName() << ", Age: " << p1.GetAge() << endl;
return 0;
}
```
在上面的例子中,`GetPerson()`函数返回一个`Person`对象,该对象会被完全复制一份,包括其成员变量和指针所指向的内存空间。因此,在`main()`函数中,`p1`对象的构造函数被调用了两次,其中一次是在`GetPerson()`函数中创建的,另一次是在`main()`函数中创建的。这种方式会导致内存空间的浪费和程序效率的降低。
为了避免这种情况,可以使用移动语义(Move Semantic)和拷贝优化(Copy Elision)来优化函数返回值的拷贝。具体实现方法可以参考引用和引用中的内容。
阅读全文