-
定义和功能
-
拷贝构造函数
- 拷贝构造函数是一种特殊的构造函数,用于创建一个新对象,该新对象是作为另一个同类型对象的副本而创建的。其函数原型通常为
类名(const 类名& other)
(在 C++ 11 之前,const
也可省略)。例如:class MyClass { public:MyClass(const MyClass& other); };
- 它主要用于初始化新对象,在以下几种情况下被调用:
- 用一个已存在的对象初始化一个新对象时,如
MyClass obj1; MyClass obj2 = obj1;
或者MyClass obj3(obj1);
。 - 函数参数按值传递对象时,例如
void func(MyClass param); MyClass obj; func(obj);
,在调用func
函数时,会调用拷贝构造函数来创建param
对象。 - 函数返回值按值返回对象时,如果函数返回一个
MyClass
类型的对象,会调用拷贝构造函数创建一个临时对象用于返回。
- 用一个已存在的对象初始化一个新对象时,如
- 拷贝赋值运算符
- 拷贝赋值运算符用于将一个对象的值赋给另一个已存在的同类型对象。其函数原型为
类名& operator=(const 类名& other)
。例如:class MyClass { public:MyClass& operator=(const MyClass& other); };
- 当执行类似
MyClass obj1, obj2; obj2 = obj1;
这样的操作时,就会调用拷贝赋值运算符。它的任务是将obj1
的状态复制到obj2
中,并且要正确处理资源的释放和重新分配(如果对象管理资源,如动态分配的内存等)。 -
调用时机
- 拷贝构造函数
- 在对象创建时被调用,是对象初始化过程的一部分。
- 拷贝赋值运算符
- 在已存在的对象被赋予新值时被调用。
- 拷贝构造函数
-
对对象状态的影响
- 拷贝构造函数
- 创建一个全新的对象,并从另一个对象初始化它的初始状态。
- 拷贝赋值运算符
- 修改一个已存在对象的状态,使其与另一个对象相同。
- 拷贝构造函数
-
示例代码对比
- 拷贝构造函数示例
class Person { private:std::string name;int age; public:Person(const Person& other) : name(other.name), age(other.age) {std::cout << "拷贝构造函数被调用" << std::endl;} }; int main() {Person p1;Person p2 = p1; // 调用拷贝构造函数return 0; }
- 拷贝赋值运算符示例
class Person { private:std::string name;int age; public:Person& operator=(const Person& other) {if (this!= &other) {name = other.name;age = other.age;}std::cout << "拷贝赋值运算符被调用" << std::endl;return *this;} }; int main() {Person p1;Person p2;p2 = p1; // 调用拷贝赋值运算符return 0; }
- 拷贝构造函数示例
- 拷贝赋值运算符用于将一个对象的值赋给另一个已存在的同类型对象。其函数原型为
- 拷贝构造函数是一种特殊的构造函数,用于创建一个新对象,该新对象是作为另一个同类型对象的副本而创建的。其函数原型通常为
-
喜欢可以点点关注!咱们下期见!