你能用英语尽可能简单地解释一下什么是复制构造函数以及我什么时候需要使用它吗 我是一个主要从事Python切换到C++的程序员。我已经掌握了指针和内存分配的诀窍,但是我已经阅读了一些关于复制构造函数的解释,我不明白它们是什么

你能用英语尽可能简单地解释一下什么是复制构造函数以及我什么时候需要使用它吗 我是一个主要从事Python切换到C++的程序员。我已经掌握了指针和内存分配的诀窍,但是我已经阅读了一些关于复制构造函数的解释,我不明白它们是什么,c++,copy-constructor,C++,Copy Constructor,你能解释一下什么是复制构造函数,什么时候需要使用吗? 什么是复制构造函数? 复制构造函数是用于复制现有实例的类/结构的特殊构造函数。根据C++标准,MyClass的复制构造函数必须具有以下签名之一: MyClass( const MyClass& other ); MyClass( MyClass& other ); MyClass( volatile const MyClass& other ); MyClass( volatile MyClass& other

你能解释一下什么是复制构造函数,什么时候需要使用吗?

什么是复制构造函数? 复制构造函数是用于复制现有实例的类/结构的特殊构造函数。根据C++标准,MyClass的复制构造函数必须具有以下签名之一:

MyClass( const MyClass& other );
MyClass( MyClass& other );
MyClass( volatile const MyClass& other );
MyClass( volatile MyClass& other );
我什么时候需要编写一个复制构造函数? 首先,您应该了解,如果不声明副本构造函数,编译器会隐式地为您提供一个副本构造函数。隐式复制构造函数执行源对象的成员级复制

[…]

在许多情况下,这就足够了。但是,在某些情况下,会员复制版本不够好。到目前为止,默认副本构造函数不足的最常见原因是,对象包含原始指针,您需要获取指针的“深层”副本。也就是说,您不想复制指针本身;而是要复制指针指向的对象

什么是复制构造函数? 复制构造函数是用于复制现有实例的类/结构的特殊构造函数。根据C++标准,MyClass的复制构造函数必须具有以下签名之一:

MyClass( const MyClass& other );
MyClass( MyClass& other );
MyClass( volatile const MyClass& other );
MyClass( volatile MyClass& other );
我什么时候需要编写一个复制构造函数? 首先,您应该了解,如果不声明副本构造函数,编译器会隐式地为您提供一个副本构造函数。隐式复制构造函数执行源对象的成员级复制

[…]

在许多情况下,这就足够了。但是,在某些情况下,会员复制版本不够好。到目前为止,默认副本构造函数不足的最常见原因是,对象包含原始指针,您需要获取指针的“深层”副本。也就是说,您不想复制指针本身;而是要复制指针指向的对象



当您需要以默认对象无法处理的方式复制对象时。@Bartekbanachowicz这是如何复制的?你提到的问题是一系列书籍推荐。我有一个特定的概念性编程问题。这是作为第一个建议链接出现的,我觉得不使用它太有趣了。主要是因为你的问题很容易被GooGabelable,而不是一个问题,而是要求参考最基本的概念。它是需要的,因为C++和其他一些语言试图假装重量级对象是真正的“标量”,可以直接分配给变量,VS被引用传递。我同意这是一个挑战,让你的头脑在不让你的脑袋爆炸的情况下思考这个问题。@HotLicks,就像你假装知道这个问题一样,我想。所有托管语言都使用指针这一事实并不意味着无法传递堆栈分配的对象。当您需要以默认对象无法处理的方式复制对象时。@Bartekbanachowicz这是一个副本吗?你提到的问题是一系列书籍推荐。我有一个特定的概念性编程问题。这是作为第一个建议链接出现的,我觉得不使用它太有趣了。主要是因为你的问题很容易被GooGabelable,而不是一个问题,而是要求参考最基本的概念。它是需要的,因为C++和其他一些语言试图假装重量级对象是真正的“标量”,可以直接分配给变量,VS被引用传递。我同意这是一个挑战,让你的头脑在不让你的脑袋爆炸的情况下思考这个问题。@HotLicks,就像你假装知道这个问题一样,我想。所有托管语言都使用指针这一事实并不意味着不可能传递堆栈分配的对象。让我帮你搜索一下,嗯?为什么要回滚?我使文章看起来更形象,并删除了引用您没有引用的内容的行。签名部分被省略了,但是类Foo的复制构造函数应该只使用一个“const Foo&Foo”作为它的唯一属性parameter@bdwain这不会绑定到左值,对吗?@BartekBanachewicz我输入了一个拼写错误,并在其中输入了2&。这就是你指的吗?让我帮你搜索一下,嗯?为什么要回滚?我使文章看起来更形象,并删除了引用您没有引用的内容的行。签名部分被省略了,但是类Foo的复制构造函数应该只使用一个“const Foo&Foo”作为它的唯一属性parameter@bdwain这不会绑定到左值,对吗?@BartekBanachewicz我输入了一个拼写错误,并在其中输入了2&。这就是你指的吗?