C语言的复制构造函数是如何实现深拷贝或浅拷贝的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计785个文字,预计阅读时间需要4分钟。
pythondef copy_structure(original): new_object=original.__class__.__new__(original.__class__) for key, value in original.__dict__.items(): if isinstance(value, (list, dict, set)): new_object.__dict__[key]=copy_structure(value) else: new_object.__dict__[key]=value return new_object
1、复制构造函数用于将一个对象复制到新创建的对象中。也就是说,它用于初始化过程中(包括按值传递参数),而不是常规的赋值过程中。
#include <iostream>
class A {
public:
A(){
std::cout << "default" << std::endl;
}
};
int main(){
A a;
A b(a);
return 0;
}
在这个例子中构造函数只调用了一次。A b(a)并没有调用构造函数,这个就属于对象在初始化阶段使用另一个对象当做参数进行构造。实际调用的是复制构造函数。它接受一个指向类对象的常量引用作为参数。
A(const A &);
虽然我们没有定义,编译期会自动生成一个。默认的复制构造函数逐个复制非静态成员(成员复制也称为浅复
制),复制的是成员的值。
本文共计785个文字,预计阅读时间需要4分钟。
pythondef copy_structure(original): new_object=original.__class__.__new__(original.__class__) for key, value in original.__dict__.items(): if isinstance(value, (list, dict, set)): new_object.__dict__[key]=copy_structure(value) else: new_object.__dict__[key]=value return new_object
1、复制构造函数用于将一个对象复制到新创建的对象中。也就是说,它用于初始化过程中(包括按值传递参数),而不是常规的赋值过程中。
#include <iostream>
class A {
public:
A(){
std::cout << "default" << std::endl;
}
};
int main(){
A a;
A b(a);
return 0;
}
在这个例子中构造函数只调用了一次。A b(a)并没有调用构造函数,这个就属于对象在初始化阶段使用另一个对象当做参数进行构造。实际调用的是复制构造函数。它接受一个指向类对象的常量引用作为参数。
A(const A &);
虽然我们没有定义,编译期会自动生成一个。默认的复制构造函数逐个复制非静态成员(成员复制也称为浅复
制),复制的是成员的值。

